【问题标题】:Solr indexing short hyphenated words with numbersSolr 用数字索引短连字符
【发布时间】:2019-10-11 04:18:41
【问题描述】:

我已经为这个问题搜索了堆栈溢出,但没有一个解决特定模式的字母连字符号,这似乎是 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)",

好像去掉了连字符

【问题讨论】:

  • 我想通了,我的更改对结果没有影响,因为 schema.xml &lt;defaultSearchField&gt;text&lt;/defaultSearchField&gt; 中的这一行实际上对应于我的产品描述。这个东西一开始就配置错误,当产品标题被索引时,它们是不可搜索的。

标签: solr


【解决方案1】:

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

您将需要一个 WhitespaceTokenizer 来仅拆分 (而不是 -StandardTokenizerClassicTokenizer 将拆分。经典标记器应该不理会t-2,但您的后续步骤不会)。

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

来自word delimiter graph filter的描述:

非字母数字字符(丢弃):“hot-spot” -> “hot”、“spot”

.. 如果您想将令牌保留为 t-2,这不是您想要的。

【讨论】:

  • 我根据你的建议更新了帖子,如果可以的话看看
  • 我做了这些更改并得到了相同的结果,结果发现任何“x-x”模式都不可搜索,无论它们是整数、字符串还是组合
  • 我想通了,我的更改对结果没有影响,因为 schema.xml &lt;defaultSearchField&gt;text&lt;/defaultSearchField&gt; 中的这一行实际上对应于产品的描述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 2013-04-02
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多