2012-12-13 84 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