如何使用SolrJ获得突出显示的片段?

时间:2016-07-08 12:34:04

标签: 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......",
}

而我收到以下回复:

{
       "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......"
              ]
            }
        }

正如您所看到的,我没有在结果中获得突出显示的术语,而是获得了一个名为突出显示的额外部分,这意味着我的Java代码必须更改。 我的问题是:我如何获得SolrJ中的精彩片段?

1 个答案:

答案 0 :(得分:2)

在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();
    }

请注意,此代码可为您提供单值字段的最佳代码段,而您需要为多值字段添加一些变体。