поиск в Solr с помощью EdgeNGramFilterFactory и минимальной длины поискового запроса - PullRequest
5 голосов
/ 05 марта 2012

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

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

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

tes

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

tess
test
tesla
...

если я ищу

test

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

test
tess
tesla
...

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

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

test
test for
test-drive
...

Можно ли настроить это в solr?

1 Ответ

5 голосов
/ 06 марта 2012

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

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...