如何对不带停用词的solr进行排序

问题描述 投票:3回答:3

我正在尝试通过忽略停用词的字段来对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"/>

似乎其他人也必须这样做吗?还是不带停用词的排序是不行吗?

solr stop-words
3个回答
1
投票

您实际上需要将停用词过滤器添加到解析器链。将您的文本粘贴到Solr Admin中的字段分析器中,您会看到A Fox中的A未被删除!


1
投票

使用埃里克(Eric)提到的分析器,我确定停用词过滤器仅捕获匹配的准确词,而不是句子的各个部分。因此,如果有令牌“ THE”,它将删除它。但是,如果有“ THE FISH”的标记,它将不会被触及。

因此,有没有办法使这项工作有效?我只想在一个字段上排序,忽略任何停用词。但是结果是一堆句子(或书名)。


1
投票

KeywordTokenizerFactory不会将内容分成多个部分,因此StopFilterFactory试图将标记(整个内容)与停用词列表进行匹配,但未找到匹配项。要使索引中没有停用词,您需要使用令牌处理程序,例如WhitespaceTokenizerFactory BUT,但您无法对令牌化字段进行排序。因此,我唯一想到的方法是:

  1. 仍在使用KeywordTokenizerFactory,
  2. 摆脱StopFilterFactory
  3. 并且使用正则表达式使用PatternReplaceFilterFactory(当前用于去除数字)从内容中删除停用词。

通常,您要排序(不搜索)的唯一停用词是“ A”,“ AN”,“ THE”。我不是很擅长reg表达式,但是我敢肯定对于许多人来说这是微不足道的。

© www.soinside.com 2019 - 2024. All rights reserved.