solr:string field不使用qf参数产生部分匹配结果

时间:2013-06-24 19:28:21

标签: solr solr4 dismax

我的经验与http://lucene.472066.n3.nabble.com/string-field-does-not-yield-exact-match-result-using-qf-parameter-td4060096.html

相反

当我向'dismax查询添加'qf'时,除非有完全匹配,否则我没有结果。

我正在使用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和普通查询的部分匹配失败。

我能错过什么?

1 个答案:

答案 0 :(得分:0)

CopyField不会更改原始字段 同样,Copyfield不会将原始分析应用于“复制”字段。

文档@ http://wiki.apache.org/solr/SchemaXml#Copy_Fields

  

副本在流源级别完成,没有副本反馈到另一个副本。

将copyfield作为copyfield标记的来源不起作用 复制域源必须是实际字段,它具有一些值并且不会级联。

因此原始和复制字段的行为将按照定义行事,在您的情况下是String和ngrams。