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"
希望对您有所帮助。祝一切顺利!
使用 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"
希望对您有所帮助。祝一切顺利!