2

我想知道是否有可能有一个空白建议?我与建议者一起工作,但它只给出令牌结果。

我正在寻找的示例:

Indexed item: b123-456

这被标记为 B123 和 456。现在用户正在寻找 b123456。搜索返回 0 个结果。(如果不返回 0 个结果,则不应发生)

现在我想提出一个建议,建议分别使用 b123 和 456。

它在薮点上拆分长字母数字,然后查看是否存在令牌,如果存在 2 或 3 个令牌,则得分更高。

我可以编写自己的代码来拆分术语,但这会产生数千个查询以获得一些结果。

有什么表现出这种行为吗?

也许如果由于大量可能性而无法使用空格,建议者会忽略“-”、“/”、“”等特殊字符。

4

1 回答 1

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>
于 2014-05-25T17:35:50.143 回答