Elasticsearch Java API 續


1、使用multi get API可以通過索引名、類型名、文檔id一次得到一個文檔集合,文檔可以來自同一個索引庫,也可以來自不同索引庫。示例如下:


MultiGetResponse multiGetItemResponses = client.prepareMultiGet()
    .add("twitter", "tweet", "1") //注釋1 .add("twitter", "tweet", "2", "3", "4") //注釋2 .add("another", "type", "foo") //注釋3 .get(); for (MultiGetItemResponse itemResponse : multiGetItemResponses) { //注釋4 GetResponse response = itemResponse.getResponse(); if (response.isExists()) { //注釋5 String json = response.getSourceAsString(); //注釋6 } }

注釋1: 通過單一的ID獲取一個文檔. 

注釋2:傳入多個id,從相同的索引名/類型名中獲取多個文檔. 
注釋3:可以同時獲取不同索引中的文檔. 
注釋4:遍歷結果集. 
注釋5:檢驗文檔是否存在. 
注釋6:獲取文檔源.

2、要在Java中實現一個有三級父子關系的嵌套搜索,相關資料很少,發在stackoverflow上以后一個Switzerland的大神很快回復了我,google+stackoverflow很好使。對應的命令行query:

{
      "query": { "has_child": { "type": "instance", "query": { "has_child": { "type": "instance_permission", "query": { "terms": { "uuid": { "index": "user", "type": "user", "id": "5", "path": "uuids" } } } } } } } }

Java api:

TermsLookupQueryBuilder terms = QueryBuilders
                    .termsLookupQuery("uuid") .lookupIndex("user") .lookupType("user") .lookupId("5") .lookupPath("uuids"); HasChildQueryBuilder hQuery = QueryBuilders .hasChildQuery("instance", QueryBuilders .hasChildQuery("instance_permission", terms)); System.out.println("Exectuing Query 1"); System.out.println(hQuery.toString()); SearchResponse searchResponse1 = client .prepareSearch("foo_oa_hr_askforleave") .setQuery(hQuery).execute().actionGet(); System.out.println("There were " + searchResponse1.getHits().getTotalHits() + " results found for Query 1."); System.out.println(searchResponse1.toString()); System.out.println();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM