Вопрос

У меня есть проблема запроса 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» при индексации и запросе. Если я индексирую что-то вроде

Мышь Вещи и веселье

Это проиндексировано как:

Показатель индекса в Solr

Как вы можете видеть слово «мышь», превращается в «MOS» по «SnowballporterFilterFactory». Что мы хотим. Однако, когда мы ищем

Мышь *

, похоже, не применяет «SnowballporterFilterFactory» таким же образом. Я думаю, из-за * в конце.

Разбивка запросов в Solr

Мой вопрос .. Есть ли способ сделать «SnowblporterFilterFactory» знать о подстановочных ценах? Так что когда я запрашиваю для

Мышь *

Я не получаю 0 результатов.

Интересно, если я запрошу для

mous *

запись возвращается.

Или может кто-нибудь предложить лучший способ запроса / индексирования этого типа поля?

Спасибо Dave

Это было полезно?

Решение

из

от FAQ :

В отличие от других типов запросов Lucene, подстановочный знак, префикс и нечеткие запросы не передаются через анализатор, который является компонентом, который выполняет такие операции, как stemming и lowercasing. Причина пропуска анализатора состоит в том, что если вы искали «собаки *», вы бы не хотели бы «собаки», сначала вытесняли «собаку», так как это будет соответствовать «собаке *», которая не является предполагаемым запросом. Эти запросы все равно нечувствительны к регистру, потому что QueryParser делает их строчными. Это поведение может быть изменено с помощью метода SetLowerCaseexPanderms (Boolean)

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

Что может быть более простым идеей: просто есть поле копирования, которое не вытекает. Пользователь может искать как из этих полей, а затем мышь * будет совпадать в нетемном поле.

(Редактировать: фактически, глядя на этот патч, я не уверен, что это сделает то, что вы хотите. Но в основном вам просто нужно сначала изменить свой обработчик запроса в стебель.)

Другие советы

В последний раз я проверяю, при использовании подстановочных знаков, анализатор запросов не используется.Таким образом, поскольку вы используете строчную камеру защиты, ваши условия проиндексируются в нижнем регистре и ищут MOSE * ничего не вернут.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top