Частичный нечувствительный поиск с Drupal 7 и Apache Solr 3.x

Я настраиваю поиск на основе Apache Solr в среде Drupal 7. Поиск использует Apache Solr и работает, но не так, как мне бы хотелось.

Когда я ввожу что-то вроде "персонала", я хотел бы получить такие результаты, как "Персонал", "Штат", "Штат".

Я перезапустил сервер Apache, очистил кеш drupal, очистил индексы и переиндексировал весь контент, но он не работает (у меня есть только результат, такой как полное слово "staff").

Итак, я обновил schema.xml, включив в него некоторые edgeNGramFilter, как это было предложено в других потоках stackru, тогда это странно, у меня есть еще 1 результат, который содержит "штатное расписание". Но если я нажму "Вы имели в виду" штатное расписание "? ", То у меня будет еще несколько "кадровых" результатов.

Кто-нибудь может помочь?

  <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="front" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="back" />    
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>  
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="front" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="back" />    
  </analyzer>
</fieldType>

2 ответа

Решение

Почему конфигурация такая сложная??? с таким количеством фильтров??? Вы можете начать Один за другим, пытаясь соответствовать индивидуальным условиям.

Если вы хотите выполнить поиск по "персоналу" и хотели бы получить такие результаты, как "Персонал", "Штат сотрудников", "Estaffing".

  1. WhitespaceTokenizerFactory - Это позволит вам токенизироваться на пустом месте
  2. Для согласования персонала с персоналом есть LowerCaseFilterFactory сделать поиск нечувствительным к регистру
  3. Чтобы подобрать персонал к штатному расписанию, проверьте, нет ли словаря, который уменьшит количество слов до корня. например SnowballPorterFilterFactory в конфигурации вам нужно будет проверить ствол.
  4. В случае совпадения персонала и персонала это может быть обработано только фильтром синонимов. Снимки индекса времени предпочтительнее с опцией раскрытия, поэтому время запроса не требуется.

Для тех, кто заинтересован, наконец, основываясь на комментариях от Jayendra @Jayendra, это работает:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="front" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="100" side="back" />    
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>         
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>  
  </analyzer>
</fieldType>
Другие вопросы по тегам