Solr未返回完全相同的元素

uqxowvwt  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(122)

使用Solr 7.7.3,我有一个标签为“alpha-ravi”的元素,当我在solr标签:“alpha”中搜索时,它返回标签为“alpha-ravi”的元素,当查看solr文档时,它不应该返回此元素。有人能解释为什么会出现这种行为吗?x1c 0d1x

ajsxfq5m

ajsxfq5m1#

如果你想检索精确的结果(即只有当用户在搜索中输入精确的“alpha-ravi”时,才返回带有“alpha-ravi”的文档),那么我建议你可以使用Keyword tokenizer(solr.KeywordTokenizerFactory)。这个tokenizer会将整个“alpha-ravi”作为一个单独的标记,因此,如果有匹配的“alpha”或“ravi”,就不会返回部分结果。
例如:在您的schema.xml文件中,您应该添加类似这样的内容(根据需要配置各种过滤器链)

<fieldType name="single_token_string" class="solr.TextField" sortMissingLast="true">
      <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.TrimFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.TrimFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      </analyzer>
    </fieldType>

然后,您可以在同一个schema.xml中使用这个fieldType(引用我们刚刚定义的KeywordTokenizer)

<field name="myField" type="single_token_string" indexed="true" stored="true" />

默认情况下,Solr使用StandardTokenizer,因此,将该连字符上的“alpha-ravi”拆分为多个标记(因此,匹配“alpha”和“ravi”)。
此外,作为一种替代方法,您也可以使用短语运行查询(不会对空格/分隔符进行标记化)。
希望能有所帮助。祝你一切顺利!

相关问题