メモ:elasticsearchのプロジェクトでの使用要件

6567 ワード

(会社の大牛から抜粋して、自分でまとめてみます)クラス比mysql、私たちは=、>、>=、高バージョンの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 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を行うと精度が失われる
  • がある.
  • groupbyフィールドが非数値の場合、
  • とエラーが発生します.
  • terms(in)条件が多い場合mustを使うと非常に遅い
  • の大きな数値の比較は有効ではありません.例えば、1505446228090(13ビット)が905446228090(12ビット)
  • 未満です.
  • ESのデータ格納ディレクトリがシステムディスクに設定され、
  • にディスクが付着する.