如何使用 SolrJ 获取突出显示的片段?
How do I get Highlighted Snippets using 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 中获取突出显示的片段?
在 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();
}
请注意,此代码将为您提供单值字段的最佳片段,而您将需要一些多值字段的变体。
我正在将我的应用程序从 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 中获取突出显示的片段?
在 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();
}
请注意,此代码将为您提供单值字段的最佳片段,而您将需要一些多值字段的变体。