Snowballforterfilterfiltoractory SnowblporterFilteractory и подстановки
-
28-09-2020 - |
Вопрос
У меня есть проблема запроса Solr, используя следующий тип поля:
<fieldType name="text_ci" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
</analyzer>
</fieldType>
.
Как вы можете видеть, это применяет «SnowblporterFilterFactoractory» при индексации и запросе. Если я индексирую что-то вроде
Мышь Вещи и веселье
Это проиндексировано как:
Как вы можете видеть слово «мышь», превращается в «MOS» по «SnowballporterFilterFactory». Что мы хотим. Однако, когда мы ищем
Мышь *
, похоже, не применяет «SnowballporterFilterFactory» таким же образом. Я думаю, из-за * в конце.
Мой вопрос .. Есть ли способ сделать «SnowblporterFilterFactory» знать о подстановочных ценах? Так что когда я запрашиваю для
Мышь *
Я не получаю 0 результатов.
Интересно, если я запрошу для
mous *
запись возвращается.
Или может кто-нибудь предложить лучший способ запроса / индексирования этого типа поля?
Спасибо Dave
Решение
из
от FAQ :
В отличие от других типов запросов Lucene, подстановочный знак, префикс и нечеткие запросы не передаются через анализатор, который является компонентом, который выполняет такие операции, как stemming и lowercasing. Причина пропуска анализатора состоит в том, что если вы искали «собаки *», вы бы не хотели бы «собаки», сначала вытесняли «собаку», так как это будет соответствовать «собаке *», которая не является предполагаемым запросом. Эти запросы все равно нечувствительны к регистру, потому что QueryParser делает их строчными. Это поведение может быть изменено с помощью метода SetLowerCaseexPanderms (Boolean)
Если вы в порядке с изменением источника Solr, solr-757 У вас есть патч, который вы можете найти полезным. Я не знаю способа изменить это, кроме погружения в источник, хотя.
Другие советы
В последний раз я проверяю, при использовании подстановочных знаков, анализатор запросов не используется.Таким образом, поскольку вы используете строчную камеру защиты, ваши условия проиндексируются в нижнем регистре и ищут MOSE * ничего не вернут.
Я думаю, что единственное, что нужно сделать, когда вы используете подстановочные знаки, - это обязательно адаптировать ваш запрос к тому, как будут проиндексированы ваши условия (как будет делать ваш анализатор запросов).