メモ:elasticsearchのプロジェクトでの使用要件
6567 ワード
(会社の大牛から抜粋して、自分でまとめてみます)クラス比mysql、私たちは=、>、>=、高バージョンのESでboolqueryを使ってfilterを置き換えました
1、等号=
2、より小さい
3、or、and
4、in
5、like
6、sum&&count
7、order by and limit
8、一括挿入
9、踏んだ穴クエリー条件が1024個余った場合、 とエラーが発生します.ページングの記録が10000より大きい場合、 とエラーが発生する.浮動小数点数でsumを行うと精度が失われる がある. groupbyフィールドが非数値の場合、 とエラーが発生します. terms(in)条件が多い場合mustを使うと非常に遅い の大きな数値の比較は有効ではありません.例えば、1505446228090(13ビット)が905446228090(12ビット) 未満です. ESのデータ格納ディレクトリがシステムディスクに設定され、 にディスクが付着する.
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、踏んだ穴