SpringBoot:Java High Level REST Client 搜索 API

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

Search API

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

在最基本的形式中,咱們能夠向請求添加查詢:elasticsearch

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一些可選參數:ide

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

還有一些其餘有趣的可選參數:ui

searchRequest.routing("routing"); // 設置路由參數spa

什麼是 routing 參數?rest

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

shard = hash(routing) % number_of_primary_shards複製代碼

  • routing 是一個可變值,默認是文檔的 _id ,也能夠設置成一個自定義的值
  • number_of_primary_shards 是主分片數量

全部的文檔 API 都接受一個叫作 routing 的路由參數,經過這個參數咱們能夠自定義文檔到分片的映射。一個自定義的路由參數能夠用來確保全部相關的文檔——例如全部屬於同一個用戶的文檔——都被存儲到同一個分片中。htm

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/en/elasticsearch/client/java-rest/7.2/java-rest-high-search.html#java-rest-high-search

做者:onlooker

來源:三無青年博客

原文:www.35youth.cn/715.html

相關文章
相關標籤/搜索