2016-08-03 56 views
1

我使用PHP Solr的延伸和做什么Solr中如下搜索:Solr的有PF和QF搜索一起

 $dismaxQuery = new SolrDisMaxQuery($search); 
    $dismaxQuery 
     ->addQueryField("fundraise_title", 10) 
     ->addQueryField("fundraiser_display_name", 10) 

     ->setPhraseFields("fundraiseTitleExact~2^10 fundraiserDisplayNameExact~2^10"); 

这将返回以下响应头:

[params] => SolrObject Object 
    (
     [pf] => fundraiseTitleExact~2^10 fundraiserDisplayNameExact~2^10 
     [fl] => frpId,fundraise_title 
     [indent] => on 
     [q] => The Nest 
     [qf] => fundraise_title^10 fundraiser_display_name^10 
     [wt] => xml 
     [hl] => true 
     [defType] => edismax 
     [version] => 2.2 
    ) 

但是当做搜索,似乎搜索只在qf查询上完成,并且pf查询被忽略;任何想法如何使这个工作在一起?

Solr的输入:

params={pf=fundraiseTitleExact~2^10+fundraiserDisplayNameExact~2^10&fl=frpId,fundraise_title&indent=on&q=The+Nest&qf=fundraise_title^10+fundraiser_display_name^10&wt=xml&hl=true&defType=edismax&version=2.2} 

回答

0

这是一种正常的行为:

QF是一个查询字段,这意味着,这些字段被用来对抗他们的搜索。

pf是一个短语字段,它只会提高结果,您从qf得到的结果,这就是为什么您可能认为它们被忽略。

Solr的文档:

在PF(短语字段)参数。一旦使用fq和qf参数识别了匹配文档列表 ,则可以使用pf参数 在q参数中的所有项都紧密邻近的情况下“提升”文档的得分。格式为 与qf参数所使用的格式相同:字段列表和 在整个q参数的词组查询出 时与其中的每一个“关联”。

+0

好的,现在我明白了一点,但还不清楚的是下列情况时的行为:1我在qf participantFname字段中使用字段participantFnameExact在pf中。你能给我一个解释的具体工作例子吗?谢谢。 –