Частичный нечувствительный поиск с 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".
WhitespaceTokenizerFactory
- Это позволит вам токенизироваться на пустом месте- Для согласования персонала с персоналом есть
LowerCaseFilterFactory
сделать поиск нечувствительным к регистру - Чтобы подобрать персонал к штатному расписанию, проверьте, нет ли словаря, который уменьшит количество слов до корня. например
SnowballPorterFilterFactory
в конфигурации вам нужно будет проверить ствол. - В случае совпадения персонала и персонала это может быть обработано только фильтром синонимов. Снимки индекса времени предпочтительнее с опцией раскрытия, поэтому время запроса не требуется.
Для тех, кто заинтересован, наконец, основываясь на комментариях от 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>