【发布时间】: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>
这里是调试查询数据:
它与调试 json 的这一部分有关吗?
"parsedquery":"+(+SynonymQuery(Synonym(text:t text:t2)) +text:2)",
"parsedquery_toString":"+(+Synonym(text:t text:t2) +text:2)",
好像去掉了连字符
【问题讨论】:
-
我想通了,我的更改对结果没有影响,因为 schema.xml
<defaultSearchField>text</defaultSearchField>中的这一行实际上对应于我的产品描述。这个东西一开始就配置错误,当产品标题被索引时,它们是不可搜索的。
标签: solr