我想知道是否有可能有一个空白建议者?我与建议者一起工作但它只给出了令牌结果。
我正在寻找的例子:
Indexed item: b123-456
这被称为B123和456。 现在用户正在寻找b123456。搜索返回0结果。(如果它不返回0结果,则不应该发生这种情况)
现在我想建议建议分别使用b123和456。
它在serval斑点上分割长字母数字,然后查看是否存在令牌,如果存在2或3个令牌,则将其评分得更高。
我可以编写自己的代码,将该术语拆分,但这会使成千上万的查询得到一些结果。
有什么能表现出这种行为吗?
如果因为大量的可能性而无法使用空格,可能会留下一些特殊字符,例如“ - ”,“/”,“。”。
答案 0 :(得分:0)
执行此操作的最佳方法是在“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>