当我将 'qf' 添加到 dismax 查询时,除非有完全匹配,否则我不会得到任何结果。
我正在使用 NGramFilterFactory 如下:
<fieldType name="text_edgengrams" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldType>
...
<field name="text_ngrams" type="text_edgengrams" indexed="true" stored="false" multiValued="true" />
...
<field name="domain" type="string" indexed="true" stored="true"/>
...
<copyField source="domain" dest="text_ngrams"/>
如果我已将 yengas.com 编入索引,我可以搜索 yengas.com 但不能搜索 yengas。但是,如果我放弃 'qf',我可以搜索 yengas。
示例搜索:
$ curl "http://localhost:8282/solr/links/select?q=domain:yengas&wt=json&indent=on&fl=id,domain,score"
=> "response":{"numFound":0,"start":0,"docs":[]
$ curl "http://localhost:8282/solr/links/select?q=domain:yengas.com&wt=json&indent=on&fl=id,domain,score"
=> "response":{"numFound":3,"start":0,"docs":[]
$ curl "http://localhost:8282/solr/links/select?defType=dismax&q=yengas&qf=domain^4&pf=domain&ps=0&fl=id,domain,score"
=> "response":{"numFound":0,"start":0,"docs":[]
$ curl "http://localhost:8282/solr/links/select?defType=dismax&q=yengas.com&pf=domain&ps=0&fl=id,domain,score"
=> "response":{"numFound":3,"start":0,"docs":[]
部分匹配在 dismax 和正常查询上失败。
我会错过什么?