2016-11-22 4 views
0

Я пытаюсь найти термин в Solr в заголовке, который содержит только строку 1604-04. Но результаты возвращаются с чем-либо, содержащим 1604 или 04. Каким будет синтаксис, чтобы заставить solr искать точную строку 1604-04?Solr точный поиск с дефисом

ответ

0

Вы также можете использовать Классический Tokenizer .the Классический Tokenizer сохраняет такое же поведение, как Standard Tokenizer со следующими исключениями: -

Слова расщеплены на дефис, если не число в слове , в этом случае токен не разделяется и номера и дефис сохраняются.

Это означает, что если кто-то ищет 1604-04, то этот токенизатор не сломает строку поиска на два токена.

+0

Спасибо. Этот токенизатор сделал трюк. – pcroadkill

1

Если вы хотите только точные соответствия, используйте поле строки или текстовое поле с KeywordTokenizer в качестве токенизатора. Они будут содержать ваши лексемы в целости и сохранности как одну единственную запись и не разбить ее на несколько токенов.

Разница заключается в том, что если вы используете текстовое поле с помощью KeywordTokenizer, вы можете применить другие фильтры, такие как LowercaseFilter, в то время как поле строки будет хранить что-нибудь дословное, без дальнейшей обработки.

+0

Большое вам спасибо. Это приводит нас к правильному решению. На самом деле мы фактически использовали Classic Tokenizer. – pcroadkill

0

Ваш анализатор разделяет «1604-04» на два термина «1604» и «04». Вы получили ответ о том, как изменить свой анализ, чтобы прекратить это делать.

Изменение вашего анализа не является лучшим решением (не может быть полностью уверенным в том, что вы написали). Использование phrase query было бы обычным способом сделать это. Вы можете использовать фразы запроса, обернув его в кавычки:

field:"1604-04" 

Это будет еще проанализировать и разделить его на два срока, но он будет искать эти точки в последовательности. Таким образом, этот запрос будет соответствовать «1604-04» и «1604 04», но не «1604 другой материал 04».

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