Elasticsearch脚本排序时间过长
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch脚本排序时间过长相关的知识,希望对你有一定的参考价值。
我正在使用脚本对Elasticsearch返回的结果(或匹配)进行排序。
查询结果是这样的。
GET trademark7/_search
{
"size" :20,
"track_scores": true,
"stored_fields": [
"_source"
],
"sort": {
"_script":{
"type" : "number",
"script" : {
"id": "algo_for_sorting",
"params":{
"query":"linkedin"
}
},
"order" : "desc"
}
},
"query" : {
"bool": {
"should": [
{
"match": {
"tm_applied_for_phonetic": {
"query": "linkedin"
}
}
},
{
"match": {
"tm_applied_for_anan" : {
"query" : "linkedin"
}
}
}
]
}
}
}
问题是:-
当我使用字段 tm_applied_for_anan。 的匹配文档。它给我返回了很多结果(或匹配),因为它是tokenized使用Anangram和它需要很多时间(5分钟)的结果出现。
原因可能是:---------------------------------。
1) 无痛脚本运行缓慢。
2) 我使用的算法很慢(我不能改变它,这个算法是由政府或其他什么机构给出的,我不知道)。
3)Elasticsearch要对所有的结果(比如40万个)应用这个慢的算法来计算分数和排序。
为了解决上述问题,我想做的是
1)让Elasticsearch给我的结果与分数计算,使用 术语频率 和 逆项频率 和所有的好东西,这是真的非常快。
2) 我将在少量的结果上应用较慢的算法(比如TOP 10,000),然后再次对结果进行排序。
我的问题是 "有没有一种方法可以让我在Elasticsearch内部只对Elasticsearch返回的一小块结果应用Re-Scoring和Re-Sorting?" 如果没有,请给我提出一些想法或你的想法!
如果你不使用 _score
在排序脚本中,你可以使用过滤器,其结果被缓存在elasticsearch中。
因此,尝试下面的查询,让我知道。
GET trademark7/_search
{
"size": 20,
"track_scores": true,
"stored_fields": [
"_source"
],
"sort": {
"_script": {
"type": "number",
"script": {
"id": "algo_for_sorting",
"params": {
"query": "linkedin"
}
},
"order": "desc"
}
},
"query": {
"bool": {
"filter": [
{
"multi_match": {
"query": "linkedin",
"fields": [
"tm_applied_for_phonetic",
"tm_applied_for_anan"
]
}
}
]
}
}
}
以上是关于Elasticsearch脚本排序时间过长的主要内容,如果未能解决你的问题,请参考以下文章
elasticsearch实现简单的脚本排序(script sort)
elasticsearch代码片段,及工具类SearchEsUtil.java