欢迎光临散文网 会员登陆 & 注册

Elasticsearch概述和DSL查询总结

2023-08-03 13:32 作者:三月的风很暖  | 我要投稿

一、Elasticsearch概述

1. 什么是Elasticsearch

Elasticsearch是基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用java开发的,开源,是当前流行的企业级搜索引擎。

2. 作用

 Elasticsearch具有极快的搜索速度,可以在几乎实时的时间内对大规模数据进行搜索和查询;它利用倒排索引和分布式搜索技术,使搜索操作变得高效,并能够多种查询方式进行全文搜索、短语匹配、模糊搜索等。

3. 特点

能够实时搜索,稳定,可靠,快速并且安装使用方便。

分布式和可扩展性:Elasticsearch基于分布式架构,可以将数据分布在多台服务器上,实现数据的水平分片和复制。这使得它能够处理海量数据,并具有高可用性和容错能力。通过添加或删除节点,可以轻松地扩展集群的容量和性能。


概念和作用

DSL查询是一种基于JSON的查询语言,用于构建复杂的查询和过滤条件,以检索和过滤文档。DSL查询提供了丰富的查询语法和灵活的组合方式,可以根据用户需求构建定制化的查询逻辑。

查询代码总结

重复代码:

@Autowired   //注入客户端

    RestHighLevelClient client; 

SearchRequest searchRequest = new SearchRequest("abc");  //参数为索引名

searchRequest.types("doc");  //参数为类型

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();  //创建查找源构造器

SearchResponse searchResponse = client.search(searchRequest);  


一、分页查询

//分页查询,设置起始下标,从0开始 

searchSourceBuilder.from(0); //工作中可以套公式计算出起始值(page-1)*size

//每页显示个数 

searchSourceBuilder.size(10); 


二、Term精准查询

searchSourceBuilder.query(QueryBuilders.termQuery("name","spring")); 


三、根据id精准匹配

searchSourceBuilder.query(QueryBuilders.termsQuery("_id", idList)); 


四、match全文检索

先将搜索字符串分词,再使用各个词条从索引中搜索。

searchSourceBuilder.query(

    QueryBuilders.matchQuery("description", "spring开发")

        .operator(Operator.OR));


五、multi一次匹配多个字段

单项匹配是在一个field中去匹配,多项匹配是拿关键字去多个Field中匹配。

MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("spring框架", "name", "description") .minimumShouldMatch("50%"); 

multiMatchQueryBuilder.field("name",10);//提升boost显示级别


六、布尔查询

must:文档必须匹配must所包括的查询条件,相当于 “AND”。 表示必须,多个查询条件必须都满足。

should:文档应该匹配should所包括的查询条件其中的一个或多个,相当于 "OR" 。表示或者,多个查询条件只要有一个满足即可。

must_not:文档不能匹配must_not所包括的该查询条件,相当于 “NOT”。表示非。

boolQueryBuilder.must(multiMatchQueryBuilder); 


七、filter过滤器

boolQueryBuilder.filter(QueryBuilders.termQuery("studymodel", "201001")); 

boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gte(60).lte(100)); 


八、sort排序

searchSourceBuilder.sort(new FieldSortBuilder("price").order(SortOrder.ASC)); 


九、高亮显示

//高亮设置

HighlightBuilder highlightBuilder = new HighlightBuilder();

highlightBuilder.preTags("<tag>");//设置前缀

highlightBuilder.postTags("</tag>");//设置后缀

// 设置高亮字段

highlightBuilder.fields().add(new HighlightBuilder.Field("name"));

//取出高亮字段内容

HighlightField nameField = highlightFields.get("name");

Text[] fragments = nameField.getFragments();

Elasticsearch概述和DSL查询总结的评论 (共 条)

分享到微博请遵守国家法律