Запрос Elasticsearch не дает точного соответствия - PullRequest
0 голосов
/ 12 июня 2018

Я ищу эластичный поиск по приведенному ниже запросу на совпадение, который не дает мне точного соответствия, а дает еще более неуместное совпадение.

использую эластичный поиск 6.2.3

Пожалуйста, найдите мойзапрос ниже

get items/_search
{
   "query" : {
      "match" : {
         "code" : "7000-8900"
      }
   }
}

Пожалуйста, найдите ответ, который я получаю от match query

7000-8900
7000-8002-WK
7000-8002-W

Ответы [ 2 ]

0 голосов
/ 20 июля 2018

Вы можете попробовать этот метод. Этот запрос возвращает запись с точным соответствием.

import json
from elasticsearch import Elasticsearch

es = Elasticsearch('http://localhost:9200')
res = es.search(index="test_index", doc_type="test_doc", body=json.dumps({"query": {"match_phrase": {"name": "Jhon"}}})))
0 голосов
/ 12 июня 2018

Вместо match необходимо использовать запрос term, как описано в документации:

Запрос термина находит документы, которые содержат точный термин, указанный винвертированный индекс

Таким образом, вы должны изменить свой запрос следующим образом:

get items/_search
{
   "query" : {
      "term" : {
         "code.keyword" : "7000-8900"
      }
   }
}

Если вы не получите никакого результата, есть две возможности:

  • Поисковый термин - это не то, о чем вы думаете (например, он не обрезан)
  • Индекс не имеет явного сопоставления, и автоматическое сопоставление не распознало код поля как строку.

Примечание: если отображение правильное и код является полем термина, можно использовать «код».Если отображение было автоматическим, и отображение распознает его как текст, вам нужно использовать «code.keyword»

...