es resthighlevelClien高亮搜索富文本格式字段丢失问题

在项目中遇到使用RestHighLevelClient进行高亮搜索时,富文本格式的字段内容出现丢失现象。例如,包含"

什么是快乐星球

"的字段在搜索"快乐"后,"星球"部分无法正常显示。经过排查,问题在于配置参数,通过调整`fragmentSize`(最大高亮分片数)和`numOfFragments`(从第一个分片开始获取高亮片段的数量)可以解决这个问题。
摘要由CSDN通过智能技术生成

问题背景:
项目中有些索引字段是富文本格式字符串(使用了富文本编辑器的内容没有将html标签过滤就存入了es里面),使用RestHighLevelClient api高亮搜索关键字,发现匹配返回的内容有缺失情况,比如es里面是
“<p>什么是快乐星球</p>”
高亮搜索快乐,发现后面的星球就没了

解决办法:

HighlightBuilder highlightBuilder = new HighlightBuilder().field("content")
                .fragmentSize(800000
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Spring Boot中使用`nativeSearchQueryBuilder`实现Elasticsearch搜索结果中的高亮显示字段,可以按照以下步骤操作: 1. 添加依赖 在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. 编写查询方法 在查询方法中,使用`nativeSearchQueryBuilder`构建查询条件,并使用`HighlightBuilder`设置高亮显示字段,示例代码如下: ```java import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; import org.springframework.data.elasticsearch.core.SearchHits; import org.springframework.data.elasticsearch.core.SearchPage; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import java.util.HashMap; import java.util.Map; public class ExampleSearchService { @Autowired private ElasticsearchRestTemplate elasticsearchRestTemplate; public Map<String, Object> search(String keyword, int pageNo, int pageSize) { // 构建查询条件 NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder() .withQuery(QueryBuilders.matchQuery("title", keyword)); // 设置高亮显示字段 HighlightBuilder highlightBuilder = new HighlightBuilder() .field("title") .requireFieldMatch(false) .preTags("<span style='color:red'>") .postTags("</span>"); queryBuilder.withHighlightBuilder(highlightBuilder); // 分页查询 Pageable pageable = PageRequest.of(pageNo, pageSize); SearchHits<ExampleEntity> searchHits = elasticsearchRestTemplate.search( queryBuilder.build(), ExampleEntity.class, IndexCoordinates.of("example"), pageable ).getSearchHits(); // 解析查询结果 Map<String, Object> result = new HashMap<>(); result.put("total", searchHits.getTotalHits().value); result.put("list", searchHits.getSearchHits()); return result; } } ``` 在以上代码中,`withQuery`方法用于设置查询条件,`withHighlightBuilder`方法用于设置高亮显示字段,`preTags`和`postTags`用于指定高亮显示的前缀和后缀。 3. 在页面中显示高亮字段 在页面中,可以通过以下方式获取高亮显示的字段: ```html <div th:each="hit : ${result.list}"> <h3 th:text="${hit.highlight('title')}"></h3> <p th:text="${hit.content}"></p> </div> ``` 在以上代码中,`highlight`方法用于获取高亮显示的字段值。 注意,以上代码仅为示例代码,需要根据具体的业务需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值