2012-08-07 4 views
3

Я пытаюсь использовать NGramFilterFactory в Solr (используя Sunspot in Rails), чтобы найти похожие заголовки. Мне удалось добавить новое поле в мою SOLR schema.xml как следующим образом:Поиск подобия с использованием Solr's NGramFilterFactory

<fieldType name="text_ngrm" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="4"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

Как я использую sunpsot в приложении рельсов и поэтому добавил новое поле через динамическое поле солнечного пятна. Все это сработало, и теперь я могу искать свою модель, используя NGramFilterFactory. Я не уверен в том, как настроить solr для поиска похожих заголовков. Вот мои конкретные вопросы:

  1. Имеет ли смысл использовать парсерный анализатор запросов, когда я пытаюсь запросить похожие заголовки?
  2. Как может параметр (Minimum 'Should' Match) помочь мне найти похожие заголовки?
  3. Основываясь на том, что именно я выбрал бы ngram min. и макс. размеры?

Благодарим за любую отзыв.

ответ

0

Там в несколько вещей, которые вы могли бы сделать:

  1. dismax не имеют нечеткий поиск. Поэтому, если вы хотите вернуть «holmes», когда пользователь ищет «дома» или «halmes», было бы лучше, если бы вы перешли на edismax парсер.
  2. Минимум «должен» может помочь вам определить, насколько гибко будут отображаться ваши результаты поиска по количеству слов, которые соответствуют. Предположим, что пользователь ищет 'Batman Dark Night' и у вас есть 'Batman Darker Night' и записи «Batman Returns» tokenized. Если mm is 2 только 'Batman Dark Night' будет возвращен, потому что он соответствует минимальному количеству слов 'Batman' и 'Night'. С другой стороны, 'Batman Returns' соответствует только одному из них, поэтому он не возвращается.
  3. NGramFilterFactory хорош в основном для автозаполнения. Я думаю PorterStemFilterFactory подходит лучше всего, что вы ищете. Вы можете найти информацию здесь http://wiki.apache.org/solr/LanguageAnalysis#Notes_about_solr.PorterStemFilterFactory