我想知道是否可以使用空格建议器?我与建议器一起工作,但它只提供标记结果。
我正在寻找的示例:
Indexed item: b123-456
这被标记为 B123 和 456。 现在用户正在寻找 b123456。搜索返回 0 个结果。(如果没有返回 0 个结果,则不应发生这种情况)
现在我想提出一个建议,建议分别使用 b123 和 456。
它将长字母数字拆分成多个点,然后查看是否存在标记,如果存在 2 或 3 个标记,则得分更高。
我可以编写自己的代码来拆分术语,但这会进行数千次查询才能获得一些结果。
有什么表现出这种行为的吗?
如果由于可能性很大而无法使用空格,建议者可能会遗漏特殊字符,如“-”、“/”、“”。”
最佳答案
最好的方法是在“schema.xml”中相应地配置索引和查询阶段的字段类型。
也就是说,我建议您对 SOLR 中的索引和查询分析阶段如何工作进行一些研究。我的猜测是您应该关注 solr.WordDelimiterFilterFactory(参见下面的示例)。
这是一个可能有用的例子。 (没有保证 :-) )
祝你好运!
<!-- A text field with defaults appropriate for English, plus
aggressive word-splitting and autophrase features enabled.
This field is just like text_en, except it adds
WordDelimiterFilter to enable splitting and matching of
words on case-change, alpha numeric boundaries, and
non-alphanumeric chars. This means certain compound word
cases will work, for example query "wi fi" will match
document "WiFi" or "wi-fi".
-->
<fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
关于java - Solr 空白建议器/查询分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14067426/