笔记:elasticsearch在项目中的使用需求

(摘抄自公司大牛的笔记,自己总结一下)
类比mysql,我们需要=、>、>=、<、<= 、or、and、in、like、count、sum、group by、order by、limit
在高版本的ES里面使用了boolquery替换了filter

1、等于号=

QueryBuilders.termQuery("isDel",1));
//termQuery相当于=,相当于isDel=1

2、大于小于号

QueryBuilders.rangeQuery("overdueStartTime").lte(startDate.getTime())
//rangeQuery 
//lte   <=
//lt    <
//gte   >=
//gt    >

3、or、and

boolQueryBuilder.must(QueryBuilders.termQuery("isDel",req.getIs_del()));
//must相当于and
caseStatusQuery.should(QueryBuilders.termQuery("caseStatus",s));
//should相当于or

4、in

QueryBuilders.termsQuery("clientCompanyId",req.getClientCompanyIdList())
//termQuery相当于in,可以传递list

5、like

QueryBuilders.wildcardQuery("phone1", "*" + req.getTelephone() + "*")
//wildcard 正则匹配

QueryBuilders.matchPhraseQuery("debtorName", req.getDebtor_name())
//matchPhrase 不会分词,直接匹配有完整相关短语的记录

6、sum&&count

AggregationBuilder debtTotalSum = AggregationBuilders.sum(DEBT_TOTAL_SUM_KEY).field("debtTotal");

AggregationBuilder debtTotalCount = AggregationBuilders.count(DEBT_TOTAL_COUNT_KEY).field("debtTotal");

7、order by and limit

SearchResponse searchResponse = client.prepareSearch(ElasticSearchUtil.getIndexName())
                .setTypes(ElasticSearchUtil.TYPE_NAME)
                .setQuery(boolQueryBuilder)
                        //指定查询字段
                .addStoredField("id")
                .addSort(order, sortOrder)
                        //分页
                .setFrom((currentPage - 1) * limit).setSize(limit)
                .execute()
                .actionGet();

8、批量插入

public  void batchInsert(List<CaseTable> list,Client client) {
        LOGGER.info("---------案件批量插入索引开始--------");
        BulkRequestBuilder bulkRequest = client.prepareBulk();
        long start = System.currentTimeMillis();
        BulkRequestBuilder delRequest = client.prepareBulk();

        for (CaseTable caseTable :list){
            IndexRequestBuilder ir = client.prepareIndex()
                    .setIndex(ElasticSearchUtil.INDEX_NAME_CASE)
                    .setType(ElasticSearchUtil.TYPE_NAME_CASE)
                    .setId(caseTable.getId().toString())
                    .setSource(JSON.toJSONString(caseTable));
            bulkRequest.add(ir);

        start = System.currentTimeMillis();
        BulkResponse bulkResponse = bulkRequest.execute().actionGet();
        LOGGER.info("案件批量插入循环所用时间 search time:{}ms", System.currentTimeMillis() - start);
        if (!bulkResponse.hasFailures()) {
            LOGGER.info("----------案件批量插入成功一轮------------");
        }
    }

9、踩过的坑

  • 当查询条件多余1024个时,会报错
  • 当分页的记录大于10000时,会报错
  • 当使用浮点数进行sum时会有精度丢失
  • 当group by字段是非数字时,会报错
  • 如果terms(in)条件比较多的话,使用must则非常慢
  • 大数值的比较不生效,如1505446228090(13位)居然小于905446228090(12位)
  • ES的数据存放目录被设置到了系统盘,导致磁盘被沾满
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch项目的详细使用流程可以概括如下: 1. 安装和配置Elasticsearch: - 下载并安装Elasticsearch,可以选择适合的版本和操作系统。 - 配置Elasticsearch的相关参数,如集群名称、节点名称、数据存储路径等。 2. 数据准备和索引设计: - 准备需要搜索和分析的数据,并设计好索引结构,包括字段映射、分词器、分析器等。 - 使用Elasticsearch的API或者命令行工具创建索引,并定义相关的映射和设置。 3. 数据导入和索引操作: - 使用Elasticsearch提供的API或者客户端库将数据导入到索引,可以批量导入或者逐条导入。 - 可以使用批量操作API来提高导入效率,如Bulk API。 4. 搜索和查询: - 使用Elasticsearch的搜索API来执行各种查询操作,如全文搜索、过滤、范围查询等。 - 可以使用查询DSL(Domain Specific Language)来构建复杂的查询语句。 5. 结果展示和分析: - 解析和处理Elasticsearch返回的搜索结果,获取所需的数据。 - 可以对搜索结果进行排序、分页、聚合等操作,以满足具体的需求。 6. 监控和调优: - 使用Elasticsearch提供的监控工具和API来监控集群的健康状态、性能指标等。 - 根据监控数据进行调优,如调整索引设置、增加或减少节点等。 7. 容灾和备份: - 配置Elasticsearch的集群复制和故障转移机制,以确保数据的可用性和容灾能力。 - 定期备份索引数据,以防止数据丢失或损坏。 8. 安全和权限控制: - 配置Elasticsearch的安全功能,如访问控制、用户认证、SSL/TLS加密等,以保护数据的安全性。 以上是Elasticsearch项目的一般使用流程,具体的实现细节和操作方式会根据项目需求使用场景来确定。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值