Elasticsearch: В чем разница между соответствием и термином в фильтре? - PullRequest
0 голосов
/ 06 ноября 2019

Я следовал учебному пособию по ES, и в какой-то момент я написал запрос, используя term в фильтре вместо рекомендованного решения, используя match. Насколько я понимаю, match использовался в части запроса для получения оценки, в то время как term использовался в части filter, чтобы просто удалить попадания перед вводом части запроса. К моему удивлению match также работает в filter части.

В чем разница между:

GET blogs/_search
{
  "query": {
    "bool": {
      "filter": {
        "match": {
          "category.keyword": "News"
        }
      }
    }
  }
}

и:

GET blogs/_search
{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "category.keyword": "News"
        }
      }
    }
  }
}

Оба возвращаютодинаковые хиты, и для всех хитов 0 баллов.

Какое поведение или match в предложении фильтра? Я ожидал бы, что это даст некоторое количество очков, но это не так.

То, что я думал:

  • term: не анализирует ни параметр, ни поле, и этосценарий yes/no.
  • match: анализирует параметр и поле и вычисляет оценку их соответствия.

Но при использовании match против keywordв части запроса filter как он себя ведет?

1 Ответ

1 голос
/ 06 ноября 2019

Запрос match - это высокоуровневый запрос, который в случае необходимости использует запрос term.

Оценка не имеет ничего общего с использованием match вместо term. Оценка набирает обороты, когда вы используете bool/must/should вместо bool/filter.

Вот как работает запрос match:

Сначала проверяется типполе.

  • Если это поле text, то значение будет проанализировано либо с помощью анализатора, указанного в запросе (если есть), либо с указанным анализатором времени поиска или индексав отображении.
  • Если это поле keyword (как в вашем случае), то входные данные не анализируются и принимаются "как есть"

Поскольку вы используетезапрос match для поля keyword и ваши входные данные представляют собой один термин, ничего не анализируется, а запрос match прибегает к использованию запроса term внизу. Вот почему вы видите те же результаты.

В общем, всегда лучше использовать запрос match, поскольку он достаточно умен, чтобы знать, что делать, учитывая поле, которое вы запрашиваете, и вводданные, которые вы ищете.

Вы можете узнать больше о разнице между этими двумя здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...