2012-03-05 2 views
5

в моем файле Solr схемы у меня есть поле поиска по умолчанию, который использует EdgeNGramFilterFactoryпоиск в Solr с EdgeNGramFilterFactory и минимальной длины запроса поиска

<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front" /> 

предположил, что мой поисковый запрос

tes 

так Я получаю результаты так:

tess 
test 
tesla 
... 

если искать

test 

я получаю результаты, как

test 
tess 
tesla 
... 

Его хорошо, потому что я использую EdgeNGramFilterFactory с minGramSize = 3 но я хочу следующее:

Когда я искать строку, длина которой составляет более чем 3 символа (например, тест) Я хочу, чтобы solr игнорировал все термины, которые состоят из 3 символов (EdgeNGramFilterFactory). Когда я ищу «тест», я не хочу получать результаты, такие как «tess» или «tesla». Я не получу результаты, которые начинаются с теста (4 символа), например

test 
test for 
test-drive 
... 

Возможно ли это настроить в solr?

ответ

5

Вы можете настроить фильтр EdgeNGram только в индексном анализаторе поля; для анализатора запросов, все равно выполняют регулярную токенизацию без каких-либо EdgeNGram. Таким образом, при поиске «теста» будут возвращены только результаты с префиксом «тест».

config, например. (не определяйте EdgeNGram для анализатора запросов)

<fieldType name=...> 
    <analyzer type="index"> 
     ... 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front" /> 
    </analyzer> 
    <analyzer type="query"> 
     ... 
     <!-- <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front" /> --> 
    </analyzer> 
</fieldType> 
Смежные вопросы