В упругом поиска, этот фильтрElasticSearch Bool фильтр с фразой (вместо одного слова/тега)
{
"bool": {
"must": {
"term": {
"article.title": "google"
}
}
}
}
Правильно возвращает статьи с «Google» в названии.
Однако
{
"bool": {
"must": {
"term": {
"article.title": "google earth"
}
}
}
}
не возвращает никаких результатов, несмотря на то, что есть статьи с точными словами «Google Earth» в названии. Я бы хотел, чтобы это было так.
Полный запрос:
{
"size": 200,
"filter": {
"bool": {
"must": {
"term": {
"article.title": "google maps"
}
}
}
},
{
"range": {
"created_date": {
"from": "2013-01-11T02:14:03.352Z"
}
}
}]
}
}
Как вы можете видеть, у меня нет «запрос» - только фильтр, размер и диапазон. Поэтому я полагаю, что ElasticSearch использует анализатор по умолчанию ...?
Что я не понимаю?
EDIT: Для тех, кто ищет решения, вот мой фильтр:
{
"query": {
"bool": {
"must": {
"must_match": {
"article.title": "google earth"
}
}
}
}
}
Узел, что (1) мы обернули булев фильтр с "запросом" и (2) " термин «изменен» на «must_match», что приводит к согласованию всей фразы (в отличие от «match», которая будет искать в статье.title со стандартным анализатором на Google Earth).
Полный запрос выглядит следующим образом:
{
"size": 200,
"filter": {
"query": {
"bool": {
"must": {
"must_match": {
"article.title": "google earth"
}
}
}
}
}
}
FWIW, причина у меня есть это условие в поле «фильтр» (в отличие от использования стандартного запроса) в том, что иногда я хочу использовать " must_not "вместо" must_not ", а иногда я также добавляю другие элементы в запрос.
Как выглядит ваш анализатор для article.title? Если вы анализируете поле с чем-то другим, кроме «Ключевого слова», это поле будет обозначаться в [google] и [earth], что сделает его совпадением с термом. – Zach
Hm, является ли статья из запроса перенесена в фильтр? Я обновил свой вопрос, чтобы проиллюстрировать, что я имею в виду. –