1. 程式人生 > >Elasticsearch count 查詢,Elasticsearch 查詢是否存在

Elasticsearch count 查詢,Elasticsearch 查詢是否存在

一、Elasticsearch Count查詢

當我們使用  Elasticsearch  的時候,如果只想知道符合條件的結果集,應該怎麼查詢?

1.1 Elasticsearch count Java API 查詢

  1. Client client =ESTools.client; SearchResponse response = client.prepareSearch(MappingManager.ASK) .setTypes(MappingManager.ASK) .setQuery(newTermQueryBuilder("id", id))//設定查詢型別 .setSearchType
    (SearchType.COUNT)//設定查詢型別,有的版本可能過期 .setSize(0)//設定返回結果集為0 .get(); long length = response.getHits().totalHits();

最後返回了符合結果集的Count 數量,但是不返回結果集,不反回結果集靠size = 0  來決定,當然我覺得  Elasticsearch  在一些版本里應該會對資料級別的Count 查詢應該有更好的優化,自己對應想當前版本的  API  。我的Version:2.0.2 。

1.2 Elasticsearch count Http API 查詢

  1. POST - http://192.168.0.1:9200/index/type/_search/
  2. {
  3. "size":0,
  4. "query":{
  5. "term":{
  6. "id":"adf183208e9a4116353e9d9cd78f2b6a"
  7. }
  8. }
  9. }



1.3 Elasticsearch Index Count查詢

  1. CountResponse response = client.prepareCount("index1","index2").get();
  2. long count = response.getCount();//返回當前index Count數量

1.4 Elasticsearch Type Count查詢

  1. CountResponse response = client.prepareCount(
    "index1","index2").setTypes("type1","type2").get();
  2. long count = response.getCount();//返回符合條件的資料

二、Elasticsearch 查詢資料是否存在

2.1 curl 方式查詢資料是否存在:

查詢:

  1. $ curl -XGET 'http://localhost:9200/twitter/tweet/_search/exists?q=user:kimchy'
  2. $ curl -XGET 'http://localhost:9200/twitter/tweet/_search/exists'-d '
  3. {
  4. "query" : {
  5. "term" : { "user" : "kimchy" }
  6. }
  7. }'

返回結果:

  1. {
  2. "exists":true
  3. }

  Java  API 我這個版本我沒找到,其他版本有一些應該有 Java API 。

2.2 Elasticsearch Java API 資料Exists判斷。

  1. /**
  2. * 判斷資料是否存在
  3. * @param id
  4. * @return
  5. */
  6. publicstaticboolean existsById(String id){
  7. Client client =ESTools.client;
  8. SearchRequestBuilder searchBuilder = client.prepareSearch(MappingManager.ASK)
  9. .setTypes(MappingManager.ASK)
  10. .setQuery(newTermQueryBuilder("id", id))//設定查詢型別
  11. .setSearchType(SearchType.COUNT)//設定查詢型別,有的版本可能過期
  12. .setSize(0);//設定返回結果集為0
  13. SearchResponse response = searchBuilder.get();
  14. long length = response.getHits().totalHits();
  15. return length >0;
  16. }

2.3 Elasticsearch Java API 判斷 Index 是否存在。

  1. //Index 可以多個
  2. ExistsRequest request =newExistsRequest("index1","index2");
  3. ExistsResponse response = client.exists(request).get();
  4. //返回是否存在
  5. boolean exists = response.exists();

2.4 Elasticsearch Java API 判斷 Type 是否存在。

  1. //Index 可以多個
  2. ExistsRequest request =newExistsRequest("index1","index2").types("type1","type2");
  3. ExistsResponse response = client.exists(request).get();
  4. //返回是否存在
  5. boolean exists = response.exists();