Поиск Elasticsearch - запрос span_near с анализатором - PullRequest
0 голосов
/ 15 апреля 2019

Мне нужна помощь, чтобы понять поведение Elasticsearch при поиске слов в некотором текстовом поле.У меня есть текстовое поле 'описание', которое выглядит как:

description: {
    type: "text"
    analyzer: "lower_ascii"
    fielddata: true
}

с настройками:

lower_ascii: {
    filter: [
        "lowercase",
        "asciifolding"
    ],
    type: "custom"
    tokenizer: "standard"
}

Так что оно токенизируется стандартным токенизатором и модифицированным полем для уменьшения ascii.Если поле содержит текст, например, 'ÁÁÁ XXX YYY ŽŽŽ' , оно создает токены, такие как 'aaa', 'xxx', 'yyy', 'zzz' .Тогда, если я хотел бы искать документы, которые содержат все слова «aaa zzz» в поле, он не работает с запросом match или match_phase.Итак, я обнаружил запрос span_near , который выглядит так, как будто он работает правильно, но он не применяет анализатор lower_ascii к значению поиска.Мой запрос выглядит так:

'query': {
        'span_near': {
            'clauses': {
                {'span_term': {'description' => 'aaa'}},
                {'span_term': {'description' => 'zzz'}}
            },
            "slop": 50,
            "in_order": FALSE
        }
    }

Это работает так, как мне нужно (если я это понимаю), НО, если я попытался найти «БА», результат будет пустым (aaa zzz работает хорошо).Есть ли способ настроить анализатор lower_ascii в запросе или есть лучший способ сделать это лучше?Благодаря.

1 Ответ

1 голос
/ 16 апреля 2019

Похоже, match_phrase запрос, который вы можете использовать. Он поддерживает настраиваемые помои.

{
  "query":
  { "match_phrase": { "description": { "query": "<query>" , slop: <slop>} } }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...