Solr PatternTokenizerFactory не работает с фразами

Я не могу заставить PatternTokenizerFactory сопоставлять несколько слов одновременно. Если я использую простое выражение, такое как «^keyword$», и ищу «ключевое слово», это сработает.

<tokenizer class="solr.PatternTokenizerFactory" pattern="^keyword$" group="0" />

"querystring":"keyword",    
"parsedquery":"(+DisjunctionMaxQuery(((title:keyword)^2.0)))/no_coord",

Однако в тот момент, когда я включаю пробел в выражение, оно ломается. т.е. мое выражение "^key.word$" и я ищу "ключевое слово", это не сработает

<tokenizer class="solr.PatternTokenizerFactory" pattern="^key.word$" group="0" />    

"querystring":"key word",
"parsedquery":"(+())/no_coord",

Я не могу понять, почему это не работает. Я пытаюсь сопоставить фразы, составленные из какого-то умного регулярного выражения, но не могу понять, что происходит.

Я проверил регулярное выражение на нескольких тестировщиках, и оно работает. Любая помощь будет принята с благодарностью.

Я использую Solr 6.1


person Talon    schedule 04.10.2018    source источник
comment
Как вы спрашиваете? Если вы используете обработчик edismax, он имеет параметр, который по умолчанию имеет значение true для разделения по пробелам (sow=false отключит его) перед анализом.   -  person MatsLindh    schedule 05.10.2018
comment
Я использую эдисмакс. Я попробую это и вернусь к вам. Пожалуйста, добавьте в качестве ответа, чтобы я мог отметить как решение, если оно верно.   -  person Talon    schedule 05.10.2018


Ответы (1)


Если вы используете edismax, параметр sow (разделение пробелами) по умолчанию имеет значение true. Это заставляет edismax разделять контент перед его анализом.

Параметр sow

Разделить по пробелам: если установлено значение false, последовательности терминов, разделенные пробелами, будут предоставлены для анализа текста за один раз, что обеспечит правильную работу фильтров анализа, которые работают с последовательностями терминов, например. многословные синонимы и опоясывающий лишай. По умолчанию true: анализ текста вызывается отдельно для каждого отдельного термина, разделенного пробелами.

person MatsLindh    schedule 05.10.2018