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", чтобы убедиться, что строка не маркирована.