Java做客户端对Elasticsearch服务的一些操作(二) 怼烎@ 2022-05-28 14:10 123阅读 0赞 **代码:** package com.east.operation; import org.elasticsearch.client.Client; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; /** * 索引的几种查询方式 * @author lhy * @date 2018.03.20 */ public class EsQuery { private Client client; public EsQuery(Client client) { super(); this.client = client; } /** * 使用get查询方式 * @param index * @param type * @param id */ public void QueryGet(String index,String type,String id){ GetRequestBuilder builder = client.prepareGet(index, type, id); GetResponse response = builder.execute().actionGet(); // GetResponse getResponse = builder.get(); // ListenableActionFuture<GetResponse> execute = (ListenableActionFuture<GetResponse>) builder.execute(); System.out.println(response.getSourceAsString()); } /** * 使用QueryBuilder * termQuery("key", obj) 完全匹配 * termsQuery("key", obj1, obj2..) 一次匹配多个值 * matchQuery("key", Obj) 单个匹配, field不支持通配符, 前缀具高级特性 * multiMatchQuery("text", "field1", "field2"..); 匹配多个字段, field有通配符忒行 * matchAllQuery(); 匹配所有文件 */ public void QueryBuilderTest(){ // QueryBuilder query = QueryBuilders.termQuery("name", "杨旭9"); // QueryBuilder query = QueryBuilders.termsQuery("name", "海哥","杨旭","小花"); QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "杨旭"); // QueryBuilder builder = QueryBuilders.multiMatchQuery("name", "海哥","杨旭","小花"); // QueryBuilder allQuery = QueryBuilders.matchAllQuery(); // System.out.println("你的查询条件为" + queryBuilder); SearchFunction(queryBuilder); } /** * 模糊查询 */ public void MoHuQuery(String name, String value){ QueryBuilder builder = QueryBuilders.fuzzyQuery(name, value); SearchFunction(builder); } /** * 字段非空查询 */ public void NotNullQuery(String name){ QueryBuilder builder = QueryBuilders.existsQuery(name); SearchFunction(builder); } /** * 根据文档id查询某个文档 * @param id */ public void QueryById(String id){ QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds(id); SearchFunction(queryBuilder); } /** * 通配符查询, 支持 * * 匹配任何字符序列, 包括空 * 避免* 开始, 会检索大量内容造成效率缓慢 */ public void WildCardQuery(){ QueryBuilder builder = QueryBuilders.wildcardQuery("name", "杨*"); SearchFunction(builder); } /** * 组合查询 * must(QueryBuilders) : AND * mustNot(QueryBuilders): NOT * should: : OR */ public void ZuHeQuery(){ QueryBuilder builder = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("tel", "12345678")) .mustNot(QueryBuilders.termQuery("age", "25")) .should(QueryBuilders.termQuery("score", "88")); SearchFunction(builder); } /** * 查询遍历抽取 * @param queryBuilder */ public void SearchFunction(QueryBuilder queryBuilder) { SearchResponse response = client.prepareSearch("student").setTypes("student01") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setScroll(new TimeValue(6000)).setQuery(queryBuilder) .setSize(10).execute().actionGet(); for (SearchHit hit : response.getHits()) { System.out.println("相关度分值: " + hit.getScore()); System.out.println("文档内容: " + hit.getSourceAsString()); } } } package com.east.test; import org.elasticsearch.client.Client; import com.east.common.EsUtil; import com.east.operation.EsQuery; public class EsQueryTest { public static void main(String[] args) { // TODO Auto-generated method stub Client client = EsUtil.EsConnect(); EsQuery es = new EsQuery(client); es.QueryGet("student", "student01", "3"); //使用get查询方式 es.QueryBuilderTest(); //使用QueryBuilder作用域匹配查询 es.MoHuQuery("age", "22"); //模糊查询 es.QueryById("3"); //查询id为3的文档 es.ZuHeQuery(); //多条件组合查询 es.WildCardQuery(); //通配符查询 es.NotNullQuery("name"); //查询name不为空的字段 } }
还没有评论,来说两句吧...