Как отсортировать Solr без стоп-слов - PullRequest
3 голосов
/ 03 августа 2010

Я пытаюсь отсортировать запрос solr по полю, игнорируя стоп-слова, но не могу найти способ сделать это. Например, я хочу, чтобы результаты сортировались следующим образом:

  • Чарли
  • Лиса
  • Вертолет

Возможно ли это? Прямо сейчас тип поля определен как:

<fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
  <analyzer>
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z])" replacement="" replace="all" />
  </analyzer>
</fieldType>

И поле добавляется как:

<field name="title" type="alphaOnlySort" indexed="true" stored="false"/>

Кажется, кто-то еще должен был бы сделать это тоже? Или сортировка без стоп-слов - нет-нет?

Ответы [ 3 ]

1 голос
/ 03 августа 2010

Используя анализатор, упомянутый Эриком, я определил, что фильтр стоп-слов захватывает только совпадающие слова, а не части предложения.Итак, если есть токен «THE», он удалит его.Но, если есть знак «РЫБА», он не коснется его.

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

1 голос
/ 03 марта 2011

KeywordTokenizerFactory не разбивает содержимое на отдельные части, поэтому StopFilterFactory пытается сопоставить токен (весь контент) со списком стоп-слов и не находит совпадений. Чтобы вывести стоп-слова из индекса, вам нужно использовать токен, такой как WhitespaceTokenizerFactory, НО вы не можете сортировать по токенизированному полю. Поэтому я могу думать только так:

  1. по-прежнему использовать KeywordTokenizerFactory,
  2. избавиться от StopFilterFactory
  3. и удалить стоп-слова из содержимого с помощью регулярного выражения, используя PatternReplaceFilterFactory (который в настоящее время используется для удаления чисел).

Как правило, единственными стоп-словами, которые вы хотите отсортировать (не искать), являются "A", "AN", "THE". Я не очень хорош в выражениях reg, но уверен, что для многих это тривиально.

1 голос
/ 03 августа 2010

Вам необходимо добавить фильтр стоп-слов в цепочку синтаксических анализаторов. Вставьте свой текст для индексирования в анализатор полей в Solr Admin, и вы увидите, что буква A в A Fox не удаляется!

...