java代码实现一个简单ES条件查询

1.导入es依赖 我使用的es是7.13.0的版本

<properties>
    <elasticsearch.version>7.13.0</elasticsearch.version>
</properties>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>${elasticsearch.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>${elasticsearch.version}</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
    <version>${elasticsearch.version}</version>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--springboot-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- fast json-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
</dependency>
2.直接上代码

import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;

/**
 * @author likk
 * @create 2021-11-22 18:31
 */
public class SearchTest {
    public static void main(String[] args) {
        try {
            //通过ES提供的 构造器 来建立起和ES之间的远程连接
            RestClientBuilder restClientBuilder =RestClient.builder(new HttpHost("192.168.22.130",19200,"http"));
            //创建高层对象准备操作ES创建的连接
            RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);
            //搜索资源构造器
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            //创建复合查询条件对象
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
            //如以下条件:查询名字中有李四的并且年龄必须大于20的
            BoolQueryBuilder must = boolQueryBuilder.should(QueryBuilders.matchQuery("name", "张三")).must(QueryBuilders.matchQuery("age", 18));
            //需要条件
            SearchSourceBuilder query = searchSourceBuilder.query(must);
            //创建一个SearchRequest,查询的请求对象
            SearchRequest request = new SearchRequest("aa").source(query);
            //得到了一个搜索响应对象
            SearchResponse search = restHighLevelClient.search(request, RequestOptions.DEFAULT);
            SearchHit[] hits = search.getHits().getHits();
            for (SearchHit hit : hits) {
                String str = hit.toString();

                  //转换成JSON格式
                JSONObject jsonObject = JSONObject.parseObject(str);
                JSONObject source = jsonObject.getJSONObject("_source");
                String name = source.getString("name");
                Integer age = source.getInteger("age");
                System.out.println("name:"+name+","+"age:"+age);

            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
3.输出结果
name:张三,age:18
name:张三,age:18

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值