Solr 用数字索引短的带连字符的单词

Solr indexing short hyphenated words with numbers

我已经为这个问题搜索了堆栈溢出,但是 none 解决了特定模式 letter-hyphen-number 这似乎是 Solr 遇到问题的特定情况。

我们的产品包含短的带连字符的字母数字单词,需要在 Solr 中编制索引并可搜索。例如,标题为 "aimpoint t-2" 的产品。用户应该能够查询 "t-2" 或 "aimpoint t-2" 以获得结果。

我已经尝试了所有可能的分词器和过滤器组合,但无法完成,希望这是我错过的简单事情。

schema.xml (Solr 6.5) 的相关部分:

<field name="product_name" type="text_en" indexed="true" stored="true" multiValued="false" />

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.ClassicTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1"/>
            <filter class="solr.FlattenGraphFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.ClassicTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1"/>
        </analyzer>
    </fieldType>

提前致谢

更新 1:

根据 MatsLindh 的回答,我更新了以下内容 schema.xml

<fieldType name="text_en" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        </analyzer>
    </fieldType>

这是分析选项卡的输出:

这里是调试查询数据:

https://gist.githubusercontent.com/jordotech/d73fecfe6e6c0ee8c2177ea2bd9d5ff2/raw/6969686eef7a43f2072849138a7178b41692e6a8/query_debug.json

是否与这部分调试有关json?

"parsedquery":"+(+SynonymQuery(Synonym(text:t text:t2)) +text:2)",
    "parsedquery_toString":"+(+Synonym(text:t text:t2) +text:2)",

似乎去掉了连字符

Solr 在索引过程中没有关于 - 的任何特殊问题 - 任何处理都将由标记器和过滤器的规则决定,您可以使用 Analysis 中的选项卡Solr 管理界面,以准确查看您的文本在链中的每个步骤中是如何处理的。

您将需要 WhitespaceTokenizer 仅在 </code> 上拆分(而不是 <code>-StandardTokenizerClassicTokenizer 将拆分。经典分词器 应该 单独留下 t-2,但您的后续步骤不会)。

您还将删除 WordDelimiterGraphFilterFactory 除非您想进一步拆分它(即,如果您需要支持仅搜索 t 而不仅仅是 t-2

来自单词分隔符图过滤器的描述:

Non-alphanumeric characters (discarded): "hot-spot" -> "hot", "spot"

.. 如果您想将令牌保留为 t-2.

,这不是您想要的