我正在尝试通过忽略停用词的字段来对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 Admin中的字段分析器中,您会看到A Fox中的A未被删除!
使用埃里克(Eric)提到的分析器,我确定停用词过滤器仅捕获匹配的准确词,而不是句子的各个部分。因此,如果有令牌“ THE”,它将删除它。但是,如果有“ THE FISH”的标记,它将不会被触及。
因此,有没有办法使这项工作有效?我只想在一个字段上排序,忽略任何停用词。但是结果是一堆句子(或书名)。
KeywordTokenizerFactory不会将内容分成多个部分,因此StopFilterFactory试图将标记(整个内容)与停用词列表进行匹配,但未找到匹配项。要使索引中没有停用词,您需要使用令牌处理程序,例如WhitespaceTokenizerFactory BUT,但您无法对令牌化字段进行排序。因此,我唯一想到的方法是:
通常,您要排序(不搜索)的唯一停用词是“ A”,“ AN”,“ THE”。我不是很擅长reg表达式,但是我敢肯定对于许多人来说这是微不足道的。