查看“Java Elasticsearch:查询”的源代码
←
Java Elasticsearch:查询
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:ElasticSearch]] [[category:Java]] == 基本用法 == 实现ES查询的关键步骤: # 创建 RestHighLevelClient,Java ES Client对象; # 创建 '''SearchRequest''' 对象:负责设置搜索参数; # 通过 Client对象发送请求; # 处理搜索结果; === 创建“RestHighLevelClient” === 略(参考:[http://wiki.eijux.com/Java_Elasticsearch%EF%BC%9A%E5%9F%BA%E7%A1%80#.E8.BF.9E.E6.8E.A5.E9.85.8D.E7.BD.AE Java Elasticsearch:基础:连接配置]) === 创建“SearchRequest” === 创建 '''SearchRequest''' 对象步骤如下: # 创建 SearchRequest 对象; # 通过 '''SearchSourceBuilder''' '''设置搜索参数'''; # 将 SearchSourceBuilder 绑定到 SearchRequest 对象; * 实际上大部分 SearchRequest 对象的搜索参数都是通过 SearchSourceBuilder 对象间接设置。 ==== 初始化“SearchRequest” ==== SearchRequest 负责设置搜索参数,包括:ES Query、分页参数等等常用设置(通过 SearchSourceBuilder 对象间接设置)。 <syntaxhighlight lang="Java" highlight=""> // 创建SearchRequest对象,索引名=posts SearchRequest searchRequest = new SearchRequest("posts"); </syntaxhighlight> ==== 创建“SearchSourceBuilder” ==== 通过 SearchSourceBuilder 间接完成搜索参数的设置。 <syntaxhighlight lang="Java" highlight=""> // 创建SearchSourceBuilder,构建ES搜索 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); </syntaxhighlight> ===== 构造查询条件 ===== Java ES 查询条件是通过 '''QueryBuilders''' 工具类构建的: '''<pre> QueryBuilder 是所有 Java ES 查询的基础接口; </pre>''' <syntaxhighlight lang="Java" highlight=""> // 例子-构建一个Match模糊查询 QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("user", "kimchy") .fuzziness(Fuzziness.AUTO) .prefixLength(3) .maxExpansions(10); // 将QueryBuilders构建的查询,绑定到SearchSourceBuilder对象 sourceBuilder.query(matchQueryBuilder); </syntaxhighlight> 或: <syntaxhighlight lang="Java" highlight=""> // 设置ES查询条件 sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy")); </syntaxhighlight> ===== 设置分页参数 ===== <syntaxhighlight lang="Java" highlight=""> // 设置分页参数,偏移从0开始 sourceBuilder.from(0); // 设置分页参数,分页大小=5 sourceBuilder.size(5); </syntaxhighlight> ===== 设置排序参数 ===== <syntaxhighlight lang="Java" highlight=""> // 根据id字段,升序 sourceBuilder.sort("id", SortOrder.ASC); </syntaxhighlight> ===== 设置请求超时时间 ===== <syntaxhighlight lang="Java" highlight=""> // 设置请求超时时间,60秒 sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); </syntaxhighlight> ==== 将 SearchSourceBuilder 绑定到 SearchRequest 对象 ==== <syntaxhighlight lang="Java" highlight=""> // 将 SearchSourceBuilder 绑定到 SearchRequest 对象 searchRequest.source(sourceBuilder); </syntaxhighlight> === 执行请求 === <syntaxhighlight lang="Java" highlight=""> SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); </syntaxhighlight> === 处理结果 === <syntaxhighlight lang="Java" highlight=""> RestStatus status = searchResponse.status(); // ES请求状态 TimeValue took = searchResponse.getTook(); // 执行时间 Boolean terminatedEarly = searchResponse.isTerminatedEarly(); Boolean timedOut = searchResponse.isTimedOut(); // 是否超时 // 获取hits,SearchHits对象包含搜索结果 SearchHits hits = searchResponse.getHits(); // 搜索结果总数 TotalHits totalHits = hits.getTotalHits(); long numHits = totalHits.value; // 遍历搜索结果 SearchHit[] searchHits = hits.getHits(); for (SearchHit hit : searchHits) { // 获取文档内容,json字符串格式 String sourceAsString = hit.getSourceAsString(); // 获取文档内容,Map对象格式 Map<String, Object> sourceAsMap = hit.getSourceAsMap(); } </syntaxhighlight> === 完整示例 === <syntaxhighlight lang="Java" highlight=""> // 首先创建 RestClient,后续章节通过RestClient对象进行参数配置。 RestClientBuilder restClientBuilder = RestClient.builder( new HttpHost("localhost", 9200, "http"), // 设置ES服务地址,支持多个 new HttpHost("localhost", 9201, "http")); // 创建 RestHighLevelClient,请求都是通过 RestHighLevelClient 实例发出去的。 RestHighLevelClient client = new RestHighLevelClient(restClientBuilder); // 创建 SearchRequest 对象 SearchRequest searchRequest = new SearchRequest(); // 通过 SearchSourceBuilder 构建搜索参数 SearchSourceBuilder builder = new SearchSourceBuilder(); // 通过 QueryBuilders 构建ES查询条件 builder.query(QueryBuilders.termsQuery("order_id", 1,2,3,4,5)); // 设置搜索参数 searchRequest.source(builder); // 执行ES请求 SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); // 获取搜索到的文档 SearchHits hits = searchResponse.getHits(); // 遍历搜索结果 SearchHit[] searchHits = hits.getHits(); for (SearchHit hit : searchHits) { // 获取文档内容,json字符串格式 String sourceAsString = hit.getSourceAsString(); // 获取文档内容,Map对象格式 Map<String, Object> sourceAsMap = hit.getSourceAsMap(); } </syntaxhighlight> == 全文搜索(Match) == <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight>
返回至“
Java Elasticsearch:查询
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息