【发布时间】:2014-11-09 00:35:08
【问题描述】:
这是我在架构中声明的字段类型:
<fieldType name="c_string" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ReversedWildcardFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
我可以毫无问题地使用通配符进行搜索。但是我对突出显示功能有一些问题。 Solr 突出显示整个而不只是匹配的短语。例如我的搜索查询是title:Keyword*。所以 solr 只会显示匹配通配符的文档。但重点是:
"title": [
"<em>Keyword and the rest of title</em>"
但我想要:
"title": [
"<em>Keyword</em> and the rest of title"
如果我像这样使用 solr.EdgeNGramFilterFactory,这可以按我的意愿工作:
<fieldType name="text_general_edge_ngram" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldType>
如果我使用它,突出显示是可以的,但通配符会被忽略。 Solr 总是像使用通配符一样搜索,title:Keyword title:Keyword* 的工作方式相同 - 显然 title:Keyword 不应匹配任何内容。
你有什么建议吗?
[添加] 示例查询:
select?q=text_dsc%3A*dobry*&rows=200&wt=json&indent=true&hl=true&hl.fl=text_dsc&hl.simple.pre=<em>&hl.simple.post=<%2Fem>
高亮结果示例:
"highlighting":{
"25352":{
"text_dsc":["<em>14276|\nDzień dobry - dokument testowy. \n\n \n\nTEST. \n\n\n</em>"]},
"25353":{
"text_dsc":["<em>14276|\nDzień dobry - dokument testowy. \n\n \n\nTEST. \n\n\n</em>"]},
"26693":{
"text_dsc":["<em>14276|\nDzień dobry - dokument testowy. \n\n \n\nTEST. \n\n\n</em>"]}}}
如您所见,查询字符串是 dobry,但整个字段都被突出显示。为什么?如果我使用上面提到的 solr.EdgeNGramFilterFactory ,相同的查询突出显示是正确的,但搜索不正确(总是通配符)
【问题讨论】:
-
您能否发布一个示例查询,尤其是突出显示参数?
-
问题已更新。查询由 solr webadmin 界面生成。