我正在尝试通过忽略停用词的字段对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"/>
似乎其他人也必须这样做?或者是在没有停用词的情况下进行排序是否禁止?
答案 0 :(得分:1)
您需要将解决方案过滤器实际添加到解析器链中。将要编入索引的文本粘贴到Solr Admin中的字段分析器中,您将看到A Fox中的A未被删除!
答案 1 :(得分:1)
使用Eric提到的分析器,我已经确定停用词过滤器只能抓取匹配的确切单词,而不是句子的句子。所以,如果有“THE”的标记,它将删除它。但是,如果有“鱼”的标记,它就不会触及它。
那么,有没有办法让这个工作?我只想对一个字段进行排序,忽略任何停用词。但结果是一堆句子(或书名)。
答案 2 :(得分:1)
KeywordTokenizerFactory不会将内容分解为单个部分,因此StopFilterFactory尝试将令牌(整个内容)与停用词列表匹配并找不到匹配项。要从索引中获取停用词,您需要使用像WhitespaceTokenizerFactory这样的标记器,但是您无法对标记化字段进行排序。所以我能想到的唯一方法就是:
通常,您想要排序(不是搜索)的唯一停用词是“A”,“AN”,“THE”。我不太擅长reg表达,但我确信这对很多人来说都是微不足道的。