我已经测试了elastic search highlight field函数,它运行良好。我使用了elastic search 2.4.4和spring-data-elasticsearch-2.0.0.RELEASE
示例代码在下面的帖子中
如何使用Spring data elasticsearch提供高亮显示
我最近将elastic search升级到5.5.0和spring-data-elasticsearch-3.0.0.M4
当我测试相同的代码时,高亮不会发生
下面是示例代码
SearchQuery searchQuery = new NativeSearchQueryBuilder().withIndices("occindex")
.withPageable(new PageRequest(0, mySpecification.getNoOfRecords()))
.withQuery(QueryBuilders.multiMatchQuery(
searchText.toLowerCase()).field("transformedTitle", 10.0f).
minimumShouldMatch("50%").fuzziness(Fuzziness.ONE).prefixLength(3)
.field("transformedDesription").type(MultiMatchQueryBuilder.Type.BEST_FIELDS))
.withHighlightFields(
new HighlightBuilder.Field("transformedTitle").preTags("<span style='background-color: #FFFF00'>")
.postTags("</span>"),
new HighlightBuilder.Field("transformedDesription").fragmentSize(250).numOfFragments(3)
.preTags("<span style='background-color: #FFFF00'>").postTags("</span>"))
.build();
Page<MyResultRecord> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,
MyResultRecord.class, new SearchResultMapper() {
@Override
public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
List<MyResultRecord> chunk = new ArrayList<MyResultRecord>();
for (SearchHit searchHit : response.getHits()) {
if (response.getHits().getHits().length <= 0) {
return null;
}
MyResultRecord myResultRecord = new MyResultRecord();
myResultRecord.setRecordId(searchHit.getId());
Map<String, Object> source = searchHit.getSource();
myResultRecord.setRisk((String) source.get("actualRisk"));
String highlightedTitle = null;
System.out.println( " Check the highlighted fileds " + searchHit.getHighlightFields());
System.out.println( " Is this null ?? " + searchHit.getHighlightFields().get("transformedTitle"));
if (searchHit.getHighlightFields().get("transformedTitle") != null)
highlightedTitle = searchHit.getHighlightFields().get("transformedTitle").fragments()[0]
.toString();
else
highlightedTitle = (String) source.get("transformedTitle");
myResultRecord.setHighlightedTitle(highlightedTitle);
myResultRecord.setScore(searchHit.getScore());
chunk.add(myResultRecord);
}
if (chunk.size() > 0) {
return new AggregatedPageImpl(chunk);
}
return null;
}
});
为了突出显示弹性搜索5.5.0中的字段,是否需要更改代码?
当我在弹性搜索日志中打印查询时,我发现只有一个突出显示字段传递给弹性搜索
{
"from":0,
"size":2,
"query":{
"multi_match":{
"query":" My Query String",
"fields":[
"transformedDesription^1.0",
"transformedTitle^1.0"
],
"type":"best_fields",
"operator":"OR",
"slop":0,
"prefix_length":0,
"max_expansions":50,
"lenient":false,
"zero_terms_query":"NONE",
"boost":1.0
}
},
"highlight":{
"fields":{
"transformedDesription":{
"pre_tags":[
"<bold>"
],
"post_tags":[
"</bold>"
]
}
}
}
}
调试时,我发现NativeSearchQuery有两个突出显示的字段,但发送到Elastic Search的最终查询只请求一个突出显示字段。
通过更改org.springframework.data.elasticsearch.core.ElasticsearchTemplate.doSearch中的以下代码使其工作
现有代码
if (searchQuery.getHighlightFields() != null) {
for (HighlightBuilder.Field highlightField : searchQuery.getHighlightFields()) {
searchRequest.highlighter(new HighlightBuilder().field(highlightField));
}
}
修改后的代码
if (searchQuery.getHighlightFields() != null) {
HighlightBuilder myBuilder = new HighlightBuilder();
for (HighlightBuilder.Field highlightField : searchQuery.getHighlightFields()) {
myBuilder.field(highlightField);
}
searchRequest.highlighter(myBuilder);
}
问题内容: 我已经测试了elasticsearch突出显示字段功能,并且工作正常。我使用了 elasticsearch2.4.4 和 spring-data- elasticsearch-2.0.0.RELEASE 我最近将 elasticsearch 升级到 5.5.0 和 spring-data-elasticsearch-3.0.0.M4 当我测试相同的代码时,突出显示不会发生 下面是示例代
这是回应的一部分 我有联系人号码和名字 现在我的第二个查询->我正在使用术语筛选器查询上面的联系电话
由于已经有很多关于连字符的问题,我已经尝试了以下解决方案: 使用字符筛选器:ElasticSearch-在名称中使用连字符进行搜索。 所以我做了这个映射: 所以char筛选器似乎没有在搜索字符串上执行?我该怎么做才能让它起作用?
在弹性搜索中,我将记录存储在命名空间和主题中。这些是简单的对象,只有(string)和。 我想通过自动完成搜索名称,为此我试图使用索引搜索。 ElasticSearch::Transport::Transport::Transport::Errors::BadRequest:[400]{“error”:{“root_cause”:[{“type”:“illegal_argument_excepti
我正在使用聚合来根据其他字段的总和对一个字段进行分组。 它正在工作,但输出与我从数据库查询得到的结果不相似。 ES查询: 输出: "domain_agg":{"doc_count_error_upper_bound": 9,"sum_other_doc_count": 1442,"存储桶": [ { "key":"doc_count","doc_count": 2,"domain_store_co
如果搜索字符串和目标对象最后有以下任何字符,那么它就不起作用。s y e 在我们的应用程序中,如果用户名为Granny,Smith。它没有搜索奶奶的任何记录,因为它以y结尾。s和e的情况也是如此,即詹姆斯、凯蒂。