elasticsearch — поисковый запрос — порядок игнорирования

#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
        }
    }
}