如何排序solr没有停用词

时间:2010-08-03 00:25:14

标签: solr stop-words

我正在尝试通过忽略停用词的字段对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 个答案:

答案 0 :(得分:1)

您需要将解决方案过滤器实际添加到解析器链中。将要编入索引的文本粘贴到Solr Admin中的字段分析器中,您将看到A Fox中的A未被删除!

答案 1 :(得分:1)

使用Eric提到的分析器,我已经确定停用词过滤器只能抓取匹配的确切单词,而不是句子的句子。所以,如果有“THE”的标记,它将删除它。但是,如果有“鱼”的标记,它就不会触及它。

那么,有没有办法让这个工作?我只想对一个字段进行排序,忽略任何停用词。但结果是一堆句子(或书名)。

答案 2 :(得分:1)

KeywordTokenizerFactory不会将内容分解为单个部分,因此StopFilterFactory尝试将令牌(整个内容)与停用词列表匹配并找不到匹配项。要从索引中获取停用词,您需要使用像WhitespaceTokenizerFactory这样的标记器,但是您无法对标记化字段进行排序。所以我能想到的唯一方法就是:

  1. 仍然使用KeywordTokenizerFactory,
  2. 摆脱StopFilterFactory
  3. 并使用PatternReplaceFilterFactory(目前用于删除数字)使用正则表达式从内容中删除停用词。
  4. 通常,您想要排序(不是搜索)的唯一停用词是“A”,“AN”,“THE”。我不太擅长reg表达,但我确信这对很多人来说都是微不足道的。