我的经验与http://lucene.472066.n3.nabble.com/string-field-does-not-yield-exact-match-result-using-qf-parameter-td4060096.html
当我将"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和普通查询的部分匹配失败。
我会错过什么?
"复制"字段也不会将"原始"分析应用于"复制"域。
文档@http://wiki.apache.org/solr/SchemaXml#Copy_Fields
复制是在流源级别完成的,并且没有任何副本馈送到另一个副本中。
将copyfield作为copyfield标记的源是不起作用的
复制字段源必须是一个实际字段,该字段具有一定的值并且不级联。
因此,Original和Copied字段将按照定义进行操作,在您的情况下,定义为String和ngrams。