2016-07-08 18 views
1

私のアプリケーションをLuceneからSolrに移行しています。私が代わりに次の応答を取得していながらSolrJを使用してハイライトされたスニペットを取得するにはどうすればよいですか?

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

をSolrには、例えば、私はキーワード「街」を検索するがあれば、かなり良く強調し、私のような応答を期待扱いあなたが見ることができるように、結果内で強調表示された用語を取得する代わりに、強調表示と呼ばれるセクションが追加されています。つまり、Javaコードを変更する必要があります。 私の質問は:どのように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(); 
    } 

あなたはマルチのためにいくつかのバリエーションが必要になりますしながら、このコードはあなたに単一値フィールドのための最高のスニペットを取得することに注意してください:SolrJで

答えて

1

は、次のコードを使用して強調表示スニペットを取得することが可能です値フィールド。

関連する問題