Elasticsearch термин запрос с двоеточиями

У меня есть строковое поле "title"(не анализируется) в asticsearch. Документ имеет название "Гарфилд 2: Хвост двух котят (2006)".

Когда я использую следующий json для запроса, результат не возвращается.

{"query":{"term":{"title":"Garfield 2: A Tail Of Two Kitties (2006)"}}}

Я пытался избежать символа двоеточия и скобок, например:

{"query":{"term":{"title":"Garfield 2\\: A Tail Of Two Kitties \\(2006\\)"}}}

До сих пор не работает. Я застрял здесь. Кто-нибудь может мне помочь?

1 ответ

Термин запроса не будет токенизировать или применять анализаторы к тексту поиска. Вместо этого if ищет точное совпадение, которое не будет работать, поскольку строковые поля анализируются / токенизируются по умолчанию.

Чтобы дать этому лучшее объяснение -

Допустим, есть строковое значение как - "Я летом: лагерь". При индексации это разбивается на токены, как показано ниже -

"I am in summer:camp" => [ I , am , in , summer , camp ]

Следовательно, даже если вы выполняете поиск по слову "Я нахожусь летом: лагерь", он все равно не будет работать, так как маркер "Я нахожусь летом: лагерь" отсутствует в индексе. Что-то вроде запроса фразы может работать лучше здесь. Или вы можете оставить поле "index" как "not_analyzed", чтобы убедиться, что строка не маркирована.

Другие вопросы по тегам