使用Solr 7.7.3,我有一个标签为“alpha-ravi”的元素,当我在solr标签:“alpha”中搜索时,它返回标签为“alpha-ravi”的元素,当查看solr文档时,它不应该返回此元素。有人能解释为什么会出现这种行为吗?x1c 0d1x
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”)。此外,作为一种替代方法,您也可以使用短语运行查询(不会对空格/分隔符进行标记化)。希望能有所帮助。祝你一切顺利!
1条答案
按热度按时间ajsxfq5m1#
如果你想检索精确的结果(即只有当用户在搜索中输入精确的“alpha-ravi”时,才返回带有“alpha-ravi”的文档),那么我建议你可以使用Keyword tokenizer(solr.KeywordTokenizerFactory)。这个tokenizer会将整个“alpha-ravi”作为一个单独的标记,因此,如果有匹配的“alpha”或“ravi”,就不会返回部分结果。
例如:在您的schema.xml文件中,您应该添加类似这样的内容(根据需要配置各种过滤器链)
然后,您可以在同一个schema.xml中使用这个fieldType(引用我们刚刚定义的KeywordTokenizer)
默认情况下,Solr使用StandardTokenizer,因此,将该连字符上的“alpha-ravi”拆分为多个标记(因此,匹配“alpha”和“ravi”)。
此外,作为一种替代方法,您也可以使用短语运行查询(不会对空格/分隔符进行标记化)。
希望能有所帮助。祝你一切顺利!