Проанализируйте и сопоставьте все термины в том же порядке
Чего я хочу добиться:
документ: "один два три четыре"
Строки поиска:
- "одна четверка" (должна совпадать)
- "четыре один" (не должно совпадать)
Что я узнал так далеко:
Для того чтобы быть учтенным, span_near
Следует использовать запрос, но это предполагает, что условия уже проанализированы клиентом (все термины должны быть предоставлены отдельно).
Чтобы проанализировать строку поиска, phrase_match
Запрос должен быть использован, но он не принимает во внимание порядок.
Вероятно, следует использовать скрипт (спасибо @ChintanShah25), но кажется невозможным проанализировать входную строку внутри скрипта.
Как добиться как анализа, так и требований заказа?
1 ответ
Нет простого способа достичь этого, вы можете сделать это с помощью любого _analyze
конечная точка с span query
или с script
а также match_phrase
1) Вы передаете строку поиска в _analyze с помощью
curl -XGET 'localhost:9200/_analyze' -d '
{
"analyzer" : "my_custom_analyzer",
"text" : "one four"
}'
вы получите что-то вроде этого
{
"tokens": [
{
"token": "one",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "four",
"start_offset": 4,
"end_offset": 8,
"type": "<ALPHANUM>",
"position": 2
}
]
}
Затем вы передаете токены span query
{
"span_near" : {
"clauses" : [
{ "span_term" : { "field" : "token1" } },
{ "span_term" : { "field" : "token2" } }
],
"slop" : 2,
"in_order" : true,
"collect_payloads" : false
}
}
2) Другой способ заключается в использовании сложных сценариев, взгляните на ответ @Andrei Stefan на этот вопрос, он использовал _POSITIONS
с match_phrase
вернуть результаты с условиями в порядке.
Надеюсь это поможет!