#elasticsearch
#elasticsearch
Вопрос:
Я использую запрос типа
{bool: {must: [{match: {name: "Cat Dog"}}]
Это дает мне записи с именем, например, «Кошка Собака корова», но не, например, «Кошка корова собака».
Как я читал здесь, можно использовать решения для этого span_near
, это единственный способ?
Я пробовал запрос, такой как :
{"query":{"bool":{"must":[],"must_not":[],"should":[{"span_near":{"slop":12,"in_order":false,"clauses":[{"span_term":{"name":"Cat"}},{"span_term":{"name":"Dog"}}]}}]}}}
Но это дает мне 0 обращений. В чем может быть проблема?
Ответ №1:
Запрос соответствия возвращает документы, которые соответствуют предоставленному тексту, предоставленный текст анализируется перед сопоставлением.
Добавление рабочего примера
Сопоставление индексов:
{
"mappings": {
"properties": {
"name": {
"type": "text"
}
}
}
}
Поисковый запрос:
{
"query": {
"match": {
"name": {
"query": "Cat Dog"
}
}
}
}
Результат поиска:
"hits": [
{
"_index": "65230619",
"_type": "_doc",
"_id": "1",
"_score": 0.36464313,
"_source": {
"name": "Cat Dog Cow"
}
},
{
"_index": "65230619",
"_type": "_doc",
"_id": "2",
"_score": 0.36464313,
"_source": {
"name": "Cat Cow Dog"
}
}
]
Поисковый запрос с использованием span_near
{
"query": {
"span_near" : {
"clauses" : [
{ "span_term" : { "name" : "cat" } },
{ "span_term" : { "name" : "dog" } }
],
"slop" : 12,
"in_order" : false
}
}
}