2015-04-18 9 views
0

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

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

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

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

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

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

+1

Покажите нам свои сопоставления, моя ставка заключается в том, что это поле имеет «индекс»: «нет» ';;) – alfasin

ответ

1

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

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

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

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

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