重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这期内容当中小编将会给大家带来有关Elasticsearch实现复合查询高亮结果功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
目前创新互联建站已为上千的企业提供了网站建设、域名、虚拟空间、网站改版维护、企业网站设计、玉树网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
一.Es的配置
实现es的全文检索功能的第一步,首先从与es进行连接开始,这里我使用的是es的5.x java api语法.
public TransportClient esClient() throws UnknownHostException{ Settings settings = Settings.builder() .put("cluster.name", "my-application") //节点的名字 .put("client.transport.sniff", true) .build(); InetSocketTransportAddress iAddress = new InetSocketTransportAddress( //连接es的ip地址和端口号 InetAddress.getByName("127.0.0.1"),9300 ); //根据先前的配置生成client,后面的操作基本都是基于这个 TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(iAddress); return client; }
二.功能的实现
以下是全文检索的核心代码,包括我遇到的错误以及解决,包括如何对高亮失效,高亮不全等的解决.
1.查询条件
TransportClient esClient = esClient(); //获取先前生成的client BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); //生成复合查询构造器 boolQuery.mustNot( QueryBuilders.matchQuery("",) //字段必须不包含啥 ); boolQuery.should( QueryBuilders.matchQuery(, ) //字段可以包含啥,相当于或者 ); boolQuery.must( QueryBuilders.matchQuery(,) //字段必须包含啥 );
2.高亮条件
//配置标题高亮显示
HighlightBuilder highlightBuilder = new HighlightBuilder(); //生成高亮查询器
highlightBuilder.field(title); //高亮查询字段
highlightBuilder.field(content); //高亮查询字段
highlightBuilder.requireFieldMatch(false); //如果要多个字段高亮,这项要为false
highlightBuilder.preTags(""); //高亮设置
highlightBuilder.postTags("");
//下面这两项,如果你要高亮如文字内容等有很多字的字段,必须配置,不然会导致高亮不全,文章内容缺失等
highlightBuilder.fragmentSize(800000); //最大高亮分片数
highlightBuilder.numOfFragments(0); //从第一个分片获取高亮片段
3.查询配置
// 根据字段进行排序,这里我根据时间进行倒排 FieldSortBuilder timeSort = SortBuilders.fieldSort("time").order(SortOrder.DESC); //查询请求生成 SearchRequestBuilder requestBuilder = esClient.prepareSearch(indexname)//索引名字 .setTypes(indextype) //索引类型 .setQuery(boolQuery) //配置查询条件 .addSort(new ScoreSortBuilder()) //根据查询相关度进行排序 .addSort(timeSort) //再根据时间进行排序 .setTrackScores(true) //避免分页之后相关性乱了 .highlighter(highlightBuilder) //配置高亮 .setFrom(from) //设置分页 .setSize();
4.获取查询结果对其高亮
//获取查询结果 SearchResponse searchResponse = requestBuilder.get(); List
上述就是小编为大家分享的Elasticsearch实现复合查询高亮结果功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。