SpringBoot:Java High Level REST Client 搜尋 API

發表於2019-08-26

Springboot整合最新版elasticSearch參考之前的文章:SpingBoot:整合ElasticSearch 7.2.0

Search API

SearchRequest用於與搜尋文件,聚合,建議有關的任何操作,還提供了在結果文件上請求突出顯示的方法.

在最基本的形式中,我們可以向請求新增查詢:

 searchRequest = indexName==null?new SearchRequest():new SearchRequest(indexName);//建立SeachRequest . 沒有引數,這將針對所有索引執行.
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//大多數搜尋引數都新增到SearchSourceBuilder . 它為搜尋請求正文中的所有內容提供了setter.
        searchSourceBuilder.query(QueryBuilders.matchAllQuery());//將match_all查詢新增到SearchSourceBuilder .
        searchRequest.source(searchSourceBuilder);//將SearchSourceBuilder新增到SeachRequest .
        highLevelClient.search(searchRequest, RequestOptions.DEFAULT);

Optional arguments

我們先來看一下SearchRequest一些可選引數:

SearchRequest searchRequest = new SearchRequest("posts"); //將請求限制為索引

還有一些其他有趣的可選引數:

searchRequest.routing("routing"); // 設定路由引數

什麼是 routing 引數?

當索引一個文件的時候,文件會被儲存在一個主分片上。在儲存時一般都會有多個主分片。Elasticsearch 如何知道一個文件應該放置在哪個分片呢?這個過程是根據下面的這個公式來決定的:

shard = hash(routing) % number_of_primary_shards
  • routing 是一個可變值,預設是文件的 _id ,也可以設定成一個自定義的值
  • number_of_primary_shards 是主分片數量

所有的文件 API 都接受一個叫做 routing 的路由引數,通過這個引數我們可以自定義文件到分片的對映。一個自定義的路由引數可以用來確保所有相關的文件——例如所有屬於同一個使用者的文件——都被儲存到同一個分片中。

searchRequest.indicesOptions(IndicesOptions.lenientExpandOpen()); // 設定`IndicesOptions`控制如何解析不可用的索引以及如何擴充套件萬用字元表示式 
searchRequest.preference("_local"); // 使用首選項引數例如執行搜尋以優先選擇本地分片. 預設是跨分片隨機化. 

Using the SearchSourceBuilder

控制搜尋行為的大多數選項都可以在SearchSourceBuilder上設定, SearchSourceBuilder包含與Rest API的搜尋請求主體中的選項相當或更少的選項.

以下是一些常見選項的幾個示例:

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); // 使用預設選項建立`SearchSourceBuilder`
QueryStringQueryBuilder queryStringQueryBuilder = QueryBuilders._queryStringQuery_("關鍵詞");//搜尋關鍵字
sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy")); // 設定查詢. 可以是任何型別的`QueryBuilder` 
sourceBuilder.from(0); // 設定確定結果索引的`from`選項以開始搜尋. 預設為0\. 
sourceBuilder.size(5); // 設定`size`選項,確定要返回的搜尋命中數. 預設為10\. 
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); // 設定一個可選的超時,控制允許搜尋的時間. 

在此之後,只需將SearchSourceBuilder新增到SearchRequest :

SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("posts");
searchRequest.source(sourceBuilder);
官方文件:https://www.elastic.co/guide/...

作者:onlooker
來源:三無青年部落格
原文:https://www.35youth.cn/715.html
github:https://github.com/onlook/elastic
版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關文章