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>
这是分析选项卡的输出:
这里是调试查询数据:
是否与这部分调试有关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>-
,StandardTokenizer
或 ClassicTokenizer
将拆分。经典分词器 应该 单独留下 t-2
,但您的后续步骤不会)。
您还将删除 WordDelimiterGraphFilterFactory
除非您想进一步拆分它(即,如果您需要支持仅搜索 t
而不仅仅是 t-2
。
来自单词分隔符图过滤器的描述:
Non-alphanumeric characters (discarded): "hot-spot" -> "hot", "spot"
.. 如果您想将令牌保留为 t-2
.
,这不是您想要的
我已经为这个问题搜索了堆栈溢出,但是 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>
这是分析选项卡的输出:
这里是调试查询数据:
是否与这部分调试有关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>-
,StandardTokenizer
或 ClassicTokenizer
将拆分。经典分词器 应该 单独留下 t-2
,但您的后续步骤不会)。
您还将删除 WordDelimiterGraphFilterFactory
除非您想进一步拆分它(即,如果您需要支持仅搜索 t
而不仅仅是 t-2
。
来自单词分隔符图过滤器的描述:
Non-alphanumeric characters (discarded): "hot-spot" -> "hot", "spot"
.. 如果您想将令牌保留为 t-2
.