Elasticsearch 6.x使用中遇到的问题

1.Elasticsearch 6.x将string类型变为了过期类型,取而代之的是text和keyword数据类型
2.text类型在存储数据的时候会默认进行分词,并生成索引。而keyword存储数据的时候,不会分词建立索引
3.旧版的Elasticsearch的index可以设置成not_analyzed,Elasticsearch 6.x的则只有true或者false
4.“index”参数用来配置该字段是否可以被用来搜索,true可以通过搜索该字段检索到文档,false为否,配置分词器,用analyzer参数。
5.Elasticsearch 6.x比较常用的指令:
curl -H “Content-Type:application/json” -XGET http://127.0.0.1:9200/crm_wx_last_msg_index/crm_wx_last_msg_type/_search?pretty -d ‘{“query”:{“bool”:{“filter”:[{“bool”:{“must”:[{“match_phrase”:{“msgType”:{“query”:“text”}}}]}}]}},"_source":{“include”:["*"]}}’
解析对应
curl -H(指定请求头) “Content-Type:application/json”(指定请求参数为JSON) -XGET(获取方式有XGET,XPUT,XPOST,XDELETE) http://127.0.0.1:9200(指定es服务器地址) crm_wx_last_msg_index(查找的索引,类似于数据库的东西) crm_wx_last_msg_type(类型,有点类似于数据库的表,但是不同类型,不能有相同名字的字段,建议一个类型,一个index) _search(可以是_mapping等)? pretty(指定是否进行格式化) -d (后面是参数了)

Elasticsearch的Java-API

1.依赖的jar包(使用的框架-spring-boot,spring-boot-starter-data-elasticsearch)

org.springframework.boot
spring-boot-starter-data-elasticsearch

2.常用的注意的点:
(1)官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index.html
3.常用的用法:
(1)构建查询条件
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
(2)添加精确查询的条件:
boolQueryBuilder.filter(QueryBuilders.termQuery(“字段”, values));
需要注意的点是:termQuery查询为精确查询,它所查询的字段不能是做了分词的字段,一般他的字段都是keywor类型,不分词的
(3)IN查找
boolQueryBuilder.must(QueryBuilders.termsQuery(“字段”, values));
需要注意的点:termsQuery为多个查询,相当于MySQL里面的IN的用法,他查询的也断也是不能是做了分词分片的
(4)范围查询:时间范围,id等范围的查询
RangeQueryBuilder lastMsgTimeRangeQueryBuilder = new RangeQueryBuilder(“字段”);
boolQueryBuilder.filter(lastMsgTimeRangeQueryBuilder);
需要注意的点:范围查询的字段最好也是没有做分词的字段
(5)使用通配符模糊查询
WildcardQueryBuilder queryBuilder = QueryBuilders.wildcardQuery(“字段”, “星号” + + “星号”);
需要注意的点:使用这种的模糊查询的效率比较低,不建议使用,推荐使用使用分词字段的模糊查询
(6)BoolQueryBuilder有must(必须),should(有点类似于or),filter(过滤检索),mustNot(不等于的感觉)
(7)分页问题:
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(boolQueryBuilder)
.withPageable(pageable)
//排序
.withSort(SortBuilders.fieldSort(“字段”).order(SortOrder.DESC))
.build();
(8) Agg聚合问题:

   TermsAggregationBuilder order = AggregationBuilders.terms(eggName).field(eggField);
    order.size(Integer.MAX_VALUE);
    SearchQuery searchQuery = new NativeSearchQueryBuilder().withIndices("索引")
            .withQuery(buildFansQuery())
            .addAggregation(order)
            .build();
             PageModel provinceAggs = elasticsearchTemplate.query(searchQuery, new ResultsExtractor<PageModel>() {
        @Override
        public PageModel extract(SearchResponse searchResponse) {

            Aggregations aggregations = searchResponse.getAggregations();
            StringTerms provinceBuket = (StringTerms) aggregations.get(eggName);
            List<StringTerms.Bucket> buckets = provinceBuket.getBuckets();

            PageModel<BucketModel> pageModel = new PageModel();
            List<BucketModel> list = new LinkedList<>();

            Iterator<StringTerms.Bucket> iterator = buckets.iterator();
            while (iterator.hasNext()) {
                StringTerms.Bucket next = iterator.next();
                Object key = next.getKey();
                log.info("key=" + key + " value=" + next.getDocCount());
                BucketModel bucketModel = new BucketModel();
                bucketModel.setKey(next.getKeyAsString());
                bucketModel.setValue(next.getDocCount() + "");
                list.add(bucketModel);
            }
            pageModel.setList(list);
            pageModel.setTotal(list.size());
            return pageModel;
        }
    });          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值