我不知道使用的是什么版本,但这似乎是以前 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 参数中删除星号并且按字段突出显示停止工作时,这有助于避免长时间调试,因为该字段不再作为正则表达式处理。
以下是 Solr 7.3 的源代码中的一些点,我们可以在其中跟踪此行为:
- Solr 调用
org.apache.solr.highlight.SolrHighlighter#getHighlightFields
- 在处理字段之前,值由
, 或此处的空格分隔:
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 应为其生成突出显示的 sn-ps。
通配符 *(星号)可用于匹配字段 glob,例如 text_* 或什至 * 以突出显示可以突出显示的所有字段。使用 * 时,请考虑添加 hl.requireFieldMatch=true。
如果未定义,将使用为 df 查询参数定义的默认值。