2013-12-10 3 views
1

Я использую elasticsearch в моем проекте в Java, с форматом документа, какelasticsearch матч/термин запроса не возвращает точное соответствие

/index/type/_mapping 
{ 
    "my_id" : "string" 
} 

Теперь предположим, что значения my_id являются A01, A02, A01.A1, A012.AB0

для запроса

{ 
"query" : { 
    "term" : { 
    "my_id" : "a01" 
    } 
    } 
} 

Наблюдаемые: документы возвращаются для A01, A01.A1, A012.AB0

Ожидается: мне нужен только документ A01.

Я искал решение и обнаружил, что мне придется использовать собственный анализатор для поля my_id. Я не хочу менять свое сопоставление для документа. Кроме того, я использовал «индекс»: «not_analyzed» в запросе, но никаких изменений в выходе не было.

+0

Вы уверены, что вы включили всю необходимую информацию по этому вопросу? Я полностью вписал то, что вы предоставили [в этой игре] (https://www.found.no/play/gist/7890789), и результаты - то, что вы ожидали. –

+0

Кажется, я нашел причину, по которой мои документы были неправильными. . Для запроса A01 у меня есть документы для A01, A01.01, A01.A01 и т. Д., И когда я заменил '.' my_id с '_', я получил только A01. Это сработало для меня. –

+0

Я думаю, что. работал как подстановочный знак, чтобы соответствовать всем, что приходит позже. Однако на нем ничего не найти. –

ответ

0

Да, вы можете использовать «not_analyzed» анализатора, но попытаться использовать термин фильтр вместо термина запроса Также проверьте текущее отображение документа

Смежные вопросы