2012-12-13 51 views
0

领域我有一个Solr的查询,我搜索(webpage_text:*test* OR company_text:*test*)Solr的高亮只在有结果

在我的高亮设置我的领域webpage_text, company_text。但是现在我总是在突出显示的结果中获得BOTH字段,即使搜索词只在webpage_text中找到,我也会获得company_text的突出显示结果,这只是整个字段。

是否有可能只返回匹配字段的亮点?

我试过requireFieldMatch,但不起作用。

@EDIT:可能是重要的信息:2个字段,实际上是由复制字段填充的空字段。这是否有影响?

<field name="company_text" type="text_general" indexed="true" stored="true" multiValued="true" default="" termVectors="true" termPositions="true" termOffsets="true"/> 
<field name="webpage_text" type="text_general" indexed="true" stored="true" multiValued="true" default="" termVectors="true" termPositions="true" termOffsets="true"/> 

<dynamicField name="*company_*" type="string" indexed="true" stored="true" multiValued="true"/> 
<dynamicField name="*talent_*" type="string" indexed="true" stored="true" multiValued="true"/> 

<copyField source="company_*" dest="company_text" maxLength="30000000"/> 
<copyField source="webpage_*" dest="webpage_text" maxLength="30000000"/> 

@编辑2:看起来副本区总是出现在高光区,即使它们没有匹配。

+0

你检查了这个:http://lucidworks.lucidimagination.com/display/solr/Highlighting? – james

回答

0

我相信requireFieldMatch选项是你需要使用的。但是,为了达到此目的,您还需要启用usePhraseHighlighter,然后通过将您的词条用引号括起来以确保您正在执行PhraseQueries。 (如:webpage_text:"*test*"

因此,一个例子可能是以下几点:

http://localhost:8983/solr/select/q=webpage_text%3A"*test*"+OR 
    +company_text%3A"*test*"&wt=xml&hl=true&hl.fl=webpage_text%2Ccompany_text 
    &hl.simple.pre=<em>&hl.simple.post=<%2Fem> 
    &hl.requireFieldMatch=true&hl.usePhraseHighlighter=true 

您需要调整服务器设置为您的方案需要和其他参数。

+0

我这样做了,但它总是让我回到2个领域。即使只有1个字段有结果。第二个字段就是完整的字段而没有突出显示。 – Nealv

0

如果未指定,Solr将始终返回所有字段。该字段是否包含在搜索查询中并不重要。突出显示匹配的字段。

如果您只有两个字段,则返回这两个/所有字段,并突出显示其中一个字段。

+0

我想你误会了。我确实有两个字段,但是当我搜索时,即使两个字段中的一个没有匹配,这两个字段总是以高亮显示返回。我正在尝试一些东西,并且我感觉它与它们是复制域的事实有关。 – Nealv

+0

我明白了。当查询中只包含一个字段时,第二个字段是否也以高亮显示返回? – kromit

+0

是的,如果我将company_text作为搜索字段,并且将“company_text,webpage_text”作为HL字段,则两个字段都将以突出显示的形式返回 – Nealv