2010-07-23 1 views
3

У меня вопрос-опрос Solr, используя следующий тип поля:SnowballPorterFilterFactory и Wildcard в 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> 

Как вы можете видеть, что это относится к «SnowballPorterFilterFactory» при индексировании и запросах. Если индекс я что-то вроде

вещи мыши и весело

Это получить индексируется как:

Index Breakdown in Solr

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

Mouse *

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

Query Breakdown in Solr

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

Mouse *

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

Интересно, если я запросить

* нами огромное

Запись действительно возвращается.

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

Благодаря Dave

ответ

2

От FAQ:

В отличии от других типов запросов Lucene, Wildcard, Prefix и нечетких запросов не передается через анализатор, который является компонентом, который выполняет такие операции, как и вытекающее lowercasing. Причина пропуски Анализатора заключается в том, что если вы искали «собак», вам не хотелось бы, чтобы «собаки» сначала были связаны с «собакой», так как это соответствовало бы «собаке», что не является предполагаемым запросом. В любом случае эти запросы нечувствительны к регистру, поскольку QueryParser делает их строчными.Такое поведение может быть изменено с помощью метода setLowercaseExpandedTerms (булево)

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

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

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

+0

Спасибо ... Это отвечает на мой вопрос о том, почему он не применяет фильтры. Мне нравится идея поля для копирования .. спасибо – CraftyFella

2

Последний раз я проверяю, когда вы используете символы, анализатор запросов не используется. Так как вы используете LowerCaseFilterFactory, ваши термины индексируются в нижнем регистре, и поиск Mous * ничего не вернет.

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

+0

Dang .. ты прав о Mous * часть .. позвольте мне уточнить вопрос – CraftyFella

+0

Является ли второй абзац единственным способом обработки подстановочных знаков в solr? – CraftyFella

 Смежные вопросы

  • Нет связанных вопросов^_^