1. 程式人生 > >elasticsearch(七)java 搜尋功能Search Request的介紹與使用

elasticsearch(七)java 搜尋功能Search Request的介紹與使用

目錄

1,首先建立主搜尋請求:

2,對主搜尋請求進行引數設定


       前端幾節都是介紹的基於單個文件或著單個文件庫的操作,

       本節開始將介紹基於所有或指定的任何個數文件庫的操作的api

        SearchRequest用於與搜尋文件、聚合、定製查詢有關的任何操作,還提供了在查詢結果的基於上,對於匹配的關鍵詞進行突出顯示的方法。

1,首先建立搜尋請求物件:

SearchRequest searchRequest = new SearchRequest(); 

2,對搜尋請求進行基本引數設定

1)設定查詢指定的某個文件庫:

SearchRequest searchRequest = new SearchRequest("posts"); 
searchRequest.types("doc"); 

2)查詢多個文件庫,其中多個文件庫名之間用逗號隔開

 SearchRequest searchRequest = new SearchRequest("posts2","posts", "posts2", "posts1");

或者這樣設定:

SearchRequest searchRequest = new SearchRequest();
// 指定只能在哪些文件庫中查詢:可以新增多個且沒有限制,中間用逗號隔開
searchRequest.indices("posts2","posts", "posts2", "posts1");

預設是去所有文件庫中進行查詢

3)指定查詢的文件庫中的文件型別:

searchRequest.types("doc1");

或多種型別,同樣是文件型別之間用逗號隔開:

 searchRequest.types("doc1", "doc1", "doc2");

4)設定指定查詢的路由分片

searchRequest.routing("routing");

5)用preference方法去指定優先去某個分片上去查詢(預設的是隨機先去某個分片)

searchRequest.preference("_local");

6)向主搜尋請求中可以新增搜尋內容的特徵引數

a.建立  搜尋內容引數設定物件:SearchSourceBuilder

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

b. 將SearchSourceBuilder物件新增到搜尋請求中:

searchRequest.source(searchSourceBuilder);

3,為搜尋的文件內容物件SearchSourceBuilder設定引數:

       大多控制搜尋內容的行為引數都可以在SearchSourceBuilder上進行設定,SearchSourceBuilder包含與Rest API的搜尋請求主體中類似的引數選項。 以下是一些常見選項的幾個示例:

1)查詢包含指定的內容:

a.查詢所有的內容

searchSourceBuilder.query(QueryBuilders.matchAllQuery());

b.查詢包含關鍵詞欄位的文件:如下,表示查詢出來所有包含user欄位且user欄位包含kimchy值的文件

sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy")); 

c.上面是基於QueryBuilders查詢選項的,另外還可以使用MatchQueryBuilder配置查詢引數

MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("user", "kimchy");
// 啟動模糊查詢
matchQueryBuilder.fuzziness(Fuzziness.AUTO); 
// 在匹配查詢上設定字首長度選項
matchQueryBuilder.prefixLength(3); 
// 設定最大擴充套件選項以控制查詢的模糊過程
matchQueryBuilder.maxExpansions(10);

d.也可以使用QueryBuilders實用程式類建立QueryBuilder物件。此類提供了可用於使用流暢的程式設計樣式建立QueryBuilder物件的輔助方法:

QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("user", "kimchy")
                                                .fuzziness(Fuzziness.AUTO)
                                                .prefixLength(3)
                                                .maxExpansions(10);
注:無論用於建立它的方法是什麼,都必須將QueryBuilder物件新增到SearchSourceBuilder
searchSourceBuilder.query(matchQueryBuilder);

3)設定查詢的起始索引位置和數量:如下表示從第1條開始,共返回5條文件資料

sourceBuilder.from(0); 
sourceBuilder.size(5); 

4)設定查詢請求的超時時間:如下表示60秒沒得到返回結果時就認為請求已超時

sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

5)預設情況下,搜尋請求會返回文件_source的內容,但與Rest API中的內容一樣,您可以覆蓋此行為。例如,您可以完全關閉_source檢索:

sourceBuilder.fetchSource(false);

該方法還接受一個或多個萬用字元模式的陣列,以控制以更精細的方式包含或排除哪些欄位

String[] includeFields = new String[] {"title", "user", "innerObject.*"};
String[] excludeFields = new String[] {"_type"};
sourceBuilder.fetchSource(includeFields, excludeFields);

 

 

本節內容待續,敬請關注 ....