Я использую Script для сортировки результатов (или совпадений), возвращаемых 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 для сопоставления документов , Он возвращает мне много результатов (или совпадений), потому что он токенизируется с использованием Anangram, и для появления результатов требуется много времени (5 минут).
Вероятные причины: -
1) Безболезненный скрипт работает медленно.
2) Алгоритм, который я использую, медленный. (Я не могу изменить его, этот алгоритм, данный каким-то правительством или чем-то еще, я не знаю.)
3) Elasticsearch должен применить этот медленный алгоритм ко всем результатам (скажем, 400 000 из них), чтобы вычислить набрать и отсортировать их.
Чтобы решить вышеупомянутую проблему, я хочу сделать следующее:
1) Пусть Elasticsearch даст мне результаты с оценками, вычисленными с использованием Term Frequency и Inverse Term Frequency и все эти хорошие вещи, что действительно-очень быстро.
2) Я буду применять более медленный алгоритм для небольшого числа результатов (скажем, в TOP 10000) и снова отсортировать результаты.
Мой вопрос таков: "Есть ли способ, которым я могу применить Пересчет и Пересортировку только для небольшого фрагмента результатов, возвращаемых Elasticsearch внутри Elasticsearch?" Если нет, пожалуйста, предложите мне несколько идей или свои мысли!