[英]Solr highlighting does not work with multiple fields hl.fl when dynamic field is present
我的索引中有一個動態文本字段bar_*
並希望 Solr 返回該字段的突出顯示。 所以我運行的是:
q=gold&hl=true&hl.fl=bar_*
它按預期工作,但如果我向hl.fl
添加更多字段,它會停止工作。 例如
q=gold&hl=true&hl.fl=bar_*,foo
筆記:
bar_*
和foo
字段在索引/架構中,這里沒有錯誤。q=gold&hl=true&hl.fl=bar_*&hl.fl=foo
或q=gold&hl=true&hl.fl=bar_* foo
沒有幫助。有誰知道如何咬這個。 我看到的可能的解決方法是:
hl.fl=*
。 但這對性能不利。我不知道使用的是什么版本,但似乎這是以前 Solr 版本的錯誤,我可以確認在 Solr 7.3 中它按預期工作。
curl -X GET \
'http://localhost:8983/solr/test/select?q=x_ggg:Test1%20OR%20bar_x:Test2&hl=true&hl.fl=%2A_ggg,foo,bar_%2A' \
-H 'cache-control: no-cache'
更正確的方法是: hl.fl=bar_*,foo,*_ggg
(使用,
或空格作為分隔符)。
當您從hl.fl
參數中刪除星號hl.fl
字段突出顯示停止工作時,這有助於避免長時間調試,因為該字段不再作為正則表達式處理。
以下是 Solr 7.3 源代碼中的點,我們可以在其中跟蹤此行為:
org.apache.solr.highlight.SolrHighlighter#getHighlightFields
,
或空格org.apache.solr.util.SolrPluginUtils#split
: org.apache.solr.util.SolrPluginUtils#split
private final static Pattern splitList=Pattern.compile(",| ");
/** Split a value that may contain a comma, space of bar separated list. */
public static String[] split(String value){
return splitList.split(value.trim(), 0);
}
org.apache.solr.highlight.SolrHighlighter#expandWildcardsInHighlightFields
。在文檔中還提到了預期合同https://lucene.apache.org/solr/guide/7_3/highlighting.html
hl.fl 指定要突出顯示的字段列表。 接受以逗號或空格分隔的字段列表,Solr 應為其生成突出顯示的片段。
*(星號)通配符可用於匹配字段全局變量,例如 text_* 甚至 * 以突出顯示所有可以突出顯示的字段。 使用 * 時,請考慮添加 hl.requireFieldMatch=true。
如果未定義,將使用為 df 查詢參數定義的默認值。
嘗試
q=gold&hl=true&hl.fl=bar_*&hl.fl=foo
在深入研究 Solr 源代碼( org.apache.solr.highlight.SolrHighlighter#getHighlightFields
)后,我找到了一個解決方法。 Solr 將hl.fl
內容解釋為正則表達式模式。 所以我將 hl.fl 指定為:
hl.fl=bar_*|foo
即使用|
而不是逗號。 這對我來說非常有效。
順便說一句,我在互聯網上沒有找到這方面的文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.