如何使用SolrJ获取突出显示的代码段?

如何使用SolrJ获取突出显示的代码段?,solr,solrj,Solr,Solrj,我正在将我的应用程序从Lucene迁移到Solr。Solr处理突出显示的效果要好得多,但是如果我搜索关键字“city”,我希望得到如下响应: { "id":"fdc3833a-0e4f-4314-ba8c", "title": "Paris is a beautiful <b>city</b>", "description": "The <b>city</b> is a great example of......", } {

我正在将我的应用程序从Lucene迁移到Solr。Solr处理突出显示的效果要好得多,但是如果我搜索关键字“city”,我希望得到如下响应:

{
   "id":"fdc3833a-0e4f-4314-ba8c",
   "title": "Paris is a beautiful <b>city</b>",
   "description": "The <b>city</b> is a great example of......",
}
{
“id”:“fdc3833a-0e4f-4314-ba8c”,
“标题”:“巴黎是一座美丽的城市”,
“描述”:“这座城市是……的一个很好的例子”,
}
而我却得到了以下回应:

{
       "id":"fdc3833a-0e4f-4314-ba8c",
       "title": "Paris is a beautiful city",
       "description": "The city is a great example of......",
    }
    "highlighting": {
        "fdc3833a-0e4f-4314-ba8c": {
              "title": [
                "Paris is a beautiful <b>city</b>"
              ],
              "description": [
                "The <b>city</b> is a great example of......"
              ]
            }
        }
{
“id”:“fdc3833a-0e4f-4314-ba8c”,
“标题”:“巴黎是一座美丽的城市”,
“描述”:“这座城市是……的一个很好的例子”,
}
“突出显示”:{
“fdc3833a-0e4f-4314-ba8c”:{
“标题”:[
“巴黎是一座美丽的城市”
],
“说明”:[
“这座城市是……的一个很好的例子”
]
}
}
如您所见,我没有在结果中得到突出显示的术语,而是得到了一个额外的部分,称为突出显示,这意味着我的Java代码必须更改。
我的问题是:如何在SolrJ中获取突出显示的代码段?

在SolrJ中,可以使用以下代码获取突出显示的代码段:

public String getHighlightedText(final QueryResponse queryResponse, final String fieldName, final String docId) {
    String highlightedText = "";
    Map<String, Map<String, List<String>>> highlights = queryResponse.getHighlighting();
    if (highlights!=null && MapUtils.isNotEmpty(highlights.get(docId))) {
        List<String> snippets = highlights.get(docId).get(fieldName);
        if (CollectionUtils.isNotEmpty(snippets)) {
            highlightedText = getFragments(snippets);
        }
    }
return highlightedText;
}

private static final String getFragments(List<String> snippets){
        StringBuilder fragments = new StringBuilder();
        for (int i = 0; i < snippets.size(); i++) {
            if (i > 0) {
                fragments.append("............");
            }
            fragments.append(snippets.get(i));
        }
        return fragments.toString();
    }
公共字符串getHighlightedText(最终查询响应QueryResponse,最终字符串字段名,最终字符串文档ID){
字符串highlightedText=“”;
Map highlights=queryResponse.getHighlighting();
if(highlights!=null&&MapUtils.isNotEmpty(highlights.get(docId))){
List snippets=highlights.get(docId).get(fieldName);
if(CollectionUtils.isNotEmpty(片段)){
highlightedText=getFragments(片段);
}
}
返回highlightedText;
}
私有静态最终字符串getFragments(列出代码段){
StringBuilder片段=新的StringBuilder();
对于(int i=0;i0){
片段。附加(“…………”);
}
append(snippets.get(i));
}
返回fragments.toString();
}
请注意,这段代码将为单值字段提供最好的代码片段,而多值字段则需要一些变体