Solr 不返回确切的元素

Solr not returning the exact element

使用 Solr 7.7.3 我有一个带有标签的元素:“alpha-ravi” 当我在 solr label:"alpha" 中搜索时,它 returning 带有标签 "alpha-ravi" 的元素 在查看 solr 文档时,它不应该 return 这个元素。 谁能解释为什么会出现这种行为?

如果您想检索准确的结果(即 return 带有“alpha-ravi”的文档,仅当用户在搜索中键入准确的“alpha-ravi”时,那么我建议您可以使用关键字分词器 (solr.KeywordTokenizerFactory)。此标记生成器会将整个“alpha-ravi”视为单个标记,因此,如果匹配“alpha”或“ravi”,则不会 return 部分结果。

例如:在您的 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”)。

此外,作为替代方案,您也可以 运行 包含短语的查询(不会在 spaces/delimiters 上标记化)。可能类似于http:localhost:8983/solr/...fq=label:"alpha-ravi"

希望对您有所帮助。祝一切顺利!