private static Optional<String> getHighlightedText(SearchHit hit) { return ofNullable(hit.getHighlightFields()) .flatMap(fields -> ofNullable(fields.get(FIELD_NAME))) .flatMap(field -> ofNullable(field.getFragments())) .flatMap(fragments -> stream(fragments).findFirst()) .map(Text::string); }
private static Optional<String> getHighlightedText(SearchHit hit) { return ofNullable(hit.getHighlightFields()) .flatMap(fields -> ofNullable(fields.get(FIELD_NAME))) .flatMap(field -> ofNullable(field.getFragments())) .flatMap(fragments -> stream(fragments).findFirst()) .map(Text::string); }
@Override public Iterable<String> getSnippets(String property) { HighlightField highlightField = hit.getHighlightFields().get( ElasticsearchIndex.toPropertyFieldName(property)); if (highlightField == null) { return null; } return Iterables.transform(Arrays.asList(highlightField.getFragments()), new Function<Text, String>() { @Override public String apply(Text fragment) { return SearchFields.getSnippet(fragment.string()); } }); } }
private HighlightedSearchResult mapToHighlightedResult(SearchHit hit) { HttpArticle article = mapToHttpArticle(hit.getSource()); List<String> highlights = Lists.newArrayList(); for (Map.Entry<String, HighlightField> fields : hit.getHighlightFields().entrySet()) { for (Text text : fields.getValue().getFragments()) { highlights.add(text.toString()); } } return new HighlightedSearchResult(article, highlights); }
/** * 高亮结果集 特殊处理 * * @param searchResponse * @param highlightField */ private static List<Map<String, Object>> setSearchResponse(SearchResponse searchResponse, String highlightField) { List<Map<String, Object>> sourceList = new ArrayList<Map<String, Object>>(); StringBuffer stringBuffer = new StringBuffer(); for (SearchHit searchHit : searchResponse.getHits().getHits()) { searchHit.getSource().put("id", searchHit.getId()); if (StringUtils.isNotEmpty(highlightField)) { System.out.println("遍历 高亮结果集,覆盖 正常结果集" + searchHit.getSource()); Text[] text = searchHit.getHighlightFields().get(highlightField).getFragments(); if (text != null) { for (Text str : text) { stringBuffer.append(str.string()); } //遍历 高亮结果集,覆盖 正常结果集 searchHit.getSource().put(highlightField, stringBuffer.toString()); } } sourceList.add(searchHit.getSource()); } return sourceList; }
private void addHighlights(List<DocumentModel> docs) { for (SearchHit hit : getResponse().getHits()) { for (DocumentModel doc : docs) { String docId = doc.getRepositoryName() + doc.getId(); String hitId = getRepoForIndex(hit.getIndex()) + hit.getId(); if (docId.equals(hitId)) { // Add highlight if it exists Map<String, HighlightField> esHighlights = hit.getHighlightFields(); if (!esHighlights.isEmpty()) { Map<String, List<String>> fields = new HashMap<>(); for (Map.Entry<String, HighlightField> entry : esHighlights.entrySet()) { String field = entry.getKey(); List<String> list = new ArrayList<>(); for (Text fragment : entry.getValue().getFragments()) { list.add(fragment.toString()); } fields.put(field, list); } doc.putContextData(PageProvider.HIGHLIGHT_CTX_DATA, (Serializable) fields); } break; } } } }
@Override public DocumentModelListImpl fetchDocuments() { DocumentModelListImpl ret = new DocumentModelListImpl(getResponse().getHits().getHits().length); DocumentModel doc; String sid = getSession().getSessionId(); for (SearchHit hit : getResponse().getHits()) { // TODO: this does not work on multi repo doc = DocumentModelReaders.fromSource(hit.getSourceAsMap()).sid(sid).getDocumentModel(); if (doc != null && consumer != null) { consumer.accept(hit, doc); } // Add highlight if it exists Map<String, HighlightField> esHighlights = hit.getHighlightFields(); if (!esHighlights.isEmpty()) { Map<String, List<String>> fields = new HashMap<>(); for (Map.Entry<String, HighlightField> entry : esHighlights.entrySet()) { String field = entry.getKey(); List<String> list = new ArrayList<>(); for (Text fragment : entry.getValue().getFragments()) { list.add(fragment.toString()); } fields.put(field, list); } doc.putContextData(PageProvider.HIGHLIGHT_CTX_DATA, (Serializable) fields); } ret.add(doc); } return ret; }
when(highlightField.getFragments()).thenReturn(value);