Чтобы найти точную строку: "AGA>23/180@20210212" Я пробовал следующие match запросы:

{"query": { "match" : {"mid": "AGA>23/180@20210212"}}}
{"query": {"bool": { "must" : [ { "match" : { "mid": "AGA>23/180@23221"}}]}}}

Elasticsearch соответствует "AGA>135/880@20210212" и "AGA>212/880@20210212"

Похоже, что значения 135 и 212 обрабатываются как подстановочные знаки.

Если вместо этого я использую query: {"query": { "term" : {"mid": "AGA>23/180@20210212"}}} то возвращается 0 результатов.

Как искать только значение "AGA>23/180@20210212"?

0
blue-sky 13 Фев 2021 в 01:56

1 ответ

Лучший ответ

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

По умолчанию используется стандартный анализатор. . Он обеспечит токенизацию на основе грамматики для AGA>23/180@20210212 и сгенерирует следующие токены.

aga, 23, 180, 20210212

Из-за этого запрос на совпадение совпадает с "AGA>135/880@20210212" и "AGA>212/880@20210212"

Для поиска точного термина вам необходимо добавить .keyword в поле mid (если вы явно не определили какое-либо отображение для поля). При этом используется анализатор ключевых слов вместо стандартного анализатора (обратите внимание на ".keyword" после поля mid). Попробуйте этот запрос ниже -

{
  "query": {
    "term": {
      "mid.keyword": "AGA>23/180@20210212"
    }
  }
}

ИЛИ вы можете изменить отображение индекса на

{
  "mappings": {
    "properties": {
      "mid": {
        "type": "keyword"
      }
    }
  }
}
1
ESCoder 13 Фев 2021 в 01:20