java search 不能使用方法_elasticsearch(七)java 搜索功能Search Request的介绍与使用...
目錄
前端幾節(jié)都是介紹的基于單個文檔或著單個文檔庫的操作,
本節(jié)開始將介紹基于所有或指定的任何個數(shù)文檔庫的操作的api
SearchRequest用于與搜索文檔、聚合、定制查詢有關(guān)的任何操作,還提供了在查詢結(jié)果的基于上,對于匹配的關(guān)鍵詞進行突出顯示的方法。
1,首先創(chuàng)建搜索請求對象:
SearchRequest searchRequest = new SearchRequest();
2,對搜索請求進行基本參數(shù)設(shè)置
1)設(shè)置查詢指定的某個文檔庫:
SearchRequest searchRequest = new SearchRequest("posts");
searchRequest.types("doc");
2)查詢多個文檔庫,其中多個文檔庫名之間用逗號隔開
SearchRequest searchRequest = new SearchRequest("posts2","posts", "posts2", "posts1");
或者這樣設(shè)置:
SearchRequest searchRequest = new SearchRequest();
// 指定只能在哪些文檔庫中查詢:可以添加多個且沒有限制,中間用逗號隔開
searchRequest.indices("posts2","posts", "posts2", "posts1");
默認(rèn)是去所有文檔庫中進行查詢
3)指定查詢的文檔庫中的文檔類型:
searchRequest.types("doc1");
或多種類型,同樣是文檔類型之間用逗號隔開:
searchRequest.types("doc1", "doc1", "doc2");
4)設(shè)置指定查詢的路由分片
searchRequest.routing("routing");
5)用preference方法去指定優(yōu)先去某個分片上去查詢(默認(rèn)的是隨機先去某個分片)
searchRequest.preference("_local");
6)向主搜索請求中可以添加搜索內(nèi)容的特征參數(shù)
a.創(chuàng)建? 搜索內(nèi)容參數(shù)設(shè)置對象:SearchSourceBuilder
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
b.?將SearchSourceBuilder對象添加到搜索請求中:
searchRequest.source(searchSourceBuilder);
3,為搜索的文檔內(nèi)容對象SearchSourceBuilder設(shè)置參數(shù):
大多控制搜索內(nèi)容的行為參數(shù)都可以在SearchSourceBuilder上進行設(shè)置,SearchSourceBuilder包含與Rest API的搜索請求主體中類似的參數(shù)選項。 以下是一些常見選項的幾個示例:
1)查詢包含指定的內(nèi)容:
a.查詢所有的內(nèi)容
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
b.查詢包含關(guān)鍵詞字段的文檔:如下,表示查詢出來所有包含user字段且user字段包含kimchy值的文檔
sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy"));
c.上面是基于QueryBuilders查詢選項的,另外還可以使用MatchQueryBuilder配置查詢參數(shù)
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("user", "kimchy");
// 啟動模糊查詢
matchQueryBuilder.fuzziness(Fuzziness.AUTO);
// 在匹配查詢上設(shè)置前綴長度選項
matchQueryBuilder.prefixLength(3);
// 設(shè)置最大擴展選項以控制查詢的模糊過程
matchQueryBuilder.maxExpansions(10);
d.也可以使用QueryBuilders實用程序類創(chuàng)建QueryBuilder對象。此類提供了可用于使用流暢的編程樣式創(chuàng)建QueryBuilder對象的輔助方法:
QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("user", "kimchy")
.fuzziness(Fuzziness.AUTO)
.prefixLength(3)
.maxExpansions(10);
注:無論用于創(chuàng)建它的方法是什么,都必須將QueryBuilder對象添加到SearchSourceBuilder
searchSourceBuilder.query(matchQueryBuilder);
3)設(shè)置查詢的起始索引位置和數(shù)量:如下表示從第1條開始,共返回5條文檔數(shù)據(jù)
sourceBuilder.from(0);
sourceBuilder.size(5);
4)設(shè)置查詢請求的超時時間:如下表示60秒沒得到返回結(jié)果時就認(rèn)為請求已超時
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
5)默認(rèn)情況下,搜索請求會返回文檔_source的內(nèi)容,但與Rest API中的內(nèi)容一樣,您可以覆蓋此行為。例如,您可以完全關(guān)閉_source檢索:
sourceBuilder.fetchSource(false);
該方法還接受一個或多個通配符模式的數(shù)組,以控制以更精細的方式包含或排除哪些字段
String[] includeFields = new String[] {"title", "user", "innerObject.*"};
String[] excludeFields = new String[] {"_type"};
sourceBuilder.fetchSource(includeFields, excludeFields);
本節(jié)內(nèi)容待續(xù),敬請關(guān)注 ....
總結(jié)
以上是生活随笔為你收集整理的java search 不能使用方法_elasticsearch(七)java 搜索功能Search Request的介绍与使用...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 结构性存款受存款保险制度保护吗
- 下一篇: java jframe 运行_java