如何在Java中用Elasticsearch 6.2.4高级REST客户端按字段搜索?
Elasticsearch 6.2.4 高级REST客户端按name字段搜索实现
我来帮你补全这段基于Elasticsearch 6.2.4高级REST客户端的搜索代码,顺便把关键环节拆解清楚:
完整代码示例
import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.builder.SearchSourceBuilder; import java.io.IOException; public class EsSearchExample { public void searchByName(RestHighLevelClient client, String name) throws IOException { // 1. 构建搜索源(基于你已有代码补充) SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); // 使用termQuery做精确匹配,若需要模糊匹配可改用matchQuery sourceBuilder.query(QueryBuilders.termQuery("name", name)); // 按需设置返回条数,比如限制最多返回10条结果 sourceBuilder.size(10); // 2. 补全搜索请求配置 SearchRequest searchRequest = new SearchRequest("people"); // 指定文档类型(6.x版本仍支持类型,这里对应你的'human') searchRequest.types("human"); // 将搜索源绑定到请求上 searchRequest.source(sourceBuilder); // 3. 执行搜索请求 SearchResponse searchResponse = client.search(searchRequest); // 4. 解析并处理搜索结果 SearchHit[] hits = searchResponse.getHits().getHits(); for (SearchHit hit : hits) { // 获取文档ID String docId = hit.getId(); // 获取原始文档内容(可直接转为字符串或Map处理) String sourceContent = hit.getSourceAsString(); System.out.println("匹配到文档ID: " + docId + ",内容: " + sourceContent); } } }
关键细节补充
- 客户端初始化:别忘了提前完成
RestHighLevelClient的初始化,示例如下(可放在项目启动逻辑或工具类中):
RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http")));
- 查询类型选择:如果需要模糊匹配(比如输入"ste"能找到"Steve"),把
termQuery替换为matchQuery("name", name)即可——term适用于精确匹配keyword类型字段,match适用于text类型字段的分词匹配。 - 资源释放:使用完客户端后记得调用
client.close();,避免资源泄漏。
内容的提问来源于stack exchange,提问作者driveall
相关产品推荐
相关产品推荐

