ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java操作ES的简单查询和bool查询

2020-09-05 09:00:31  阅读:491  来源: 互联网

标签:map java 查询 client bool TransportClient put jiedada public


导入包

 <dependencies>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.7</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
        </dependency>
    </dependencies>
View Code

2.Java操作

基本操作通过client客户端对象获得客户端然后通过preparIndex等方法传入index,type,id参数和Kibaan中的操作一样

public class EsTest {
    //创建客户端
    public TransportClient createClient() throws UnknownHostException {
        return new PreBuiltTransportClient(Settings.EMPTY)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
    }
    //添加方法
    @Test
    public void testAddDoc() throws Exception{
        TransportClient client = createClient();
        //添加index,type,id
        IndexRequestBuilder indexRequestBuilder = client.prepareIndex("jiedada", "shuai", "1");
        //准备数据
        Map map = new HashMap();
        map.put("id",1);
        map.put("name","jiedada");
        map.put("age",20);
        map.put("sex",1);
        //传入数据并且提交数据
        IndexResponse indexResponse = indexRequestBuilder.setSource(map).get();
        System.out.println(indexResponse.getResult());
        //关闭客户端
        client.close();
    }
    //修改方法
    @Test
    public void testUpdateDoc() throws Exception{
        TransportClient client = createClient();
        //添加index,type,id
        UpdateRequestBuilder updateRequestBuilder = client.prepareUpdate("jiedada", "shuai", "1");
        //准备数据
        Map map = new HashMap();
        map.put("id",1);
        map.put("name","jieshuai");
        map.put("sex",1);
        //传入数据并且提交数据
        UpdateResponse updateResponse = updateRequestBuilder.setDoc(map).get();
        System.out.println(updateResponse.getResult());
        //关闭客户端
        client.close();
    }
    //查询方法
    @Test
    public void testFindDoc() throws Exception{
        TransportClient client = createClient();
        GetRequestBuilder getRequestBuilder = client.prepareGet("jiedada", "shuai", "1");
        GetResponse getFields = getRequestBuilder.get();
        System.out.println(getFields.getSource());
        client.close();
    }
    //删除方法方法
    @Test
    public void testDelDoc() throws Exception{
        TransportClient client = createClient();
        client.prepareDelete("jiedada", "shuai", "1").get();
        client.close();
    }
    //批量操作
    @Test
    public void testBulkDoc() throws Exception{
        TransportClient client = createClient();
        BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
        //获得添加对象
        IndexRequestBuilder indexRequestBuilder = client.prepareIndex("jiedada", "shuai", "1");
        //准备数据
        Map map = new HashMap();
        map.put("id",1);
        map.put("name","jiedada");
        map.put("sex",1);
        indexRequestBuilder.setSource(map);
        //传入数据并且提交数据
        //获得更新对象
        UpdateRequestBuilder updateRequestBuilder = client.prepareUpdate("jiedada", "shuai", "1");
        //准备数据
        Map map1 = new HashMap();
        map1.put("id",1);
        map1.put("name","jieshuai");
        map1.put("sex",1);
        //传入数据并且提交数据
        updateRequestBuilder.setDoc(map1);
        BulkResponse bulkItemResponses = bulkRequestBuilder.add(indexRequestBuilder).add(updateRequestBuilder).get();
        //获得多个对象
        BulkItemResponse[] items = bulkItemResponses.getItems();
        for (BulkItemResponse item : items) {
            //判断是否保存成功,如果不成功
            System.out.println(item.getFailure());
        }
        client.close();
    }
    //bool查询和过滤
    @Test
    public void testBoolDoc() throws Exception{
        TransportClient client = createClient();
        //获得search对象
        SearchRequestBuilder search = client.prepareSearch("jiedada");
        /**
         * {
         "query": {
         "bool": {  //booleanQuery 组合查询
         "must": [   //查询 与(must) 或(should) 非(must not)
         {
         "match": {//标准查询(分词匹配)  term:单词查询(部分词)
         "description": "hello java"
         }
         }
         ],
         "filter": {  //过滤
         "term": {"description": "hello world"}
         }
         }
         },
         "from": 20,
         "size": 10,
         "_source": ["fullName", "age", "email"],
         "sort": [{"join_date": "desc"},{"age": "asc"}]
         }
         */
        //通过工具类获得must
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        List<QueryBuilder> must = queryBuilder.must();
        //匹配条件
        must.add(QueryBuilders.matchQuery("name","jiedada"));
        //过滤条件
        queryBuilder.filter(QueryBuilders.rangeQuery("age").gt(18).lt(25));
        search.setQuery(queryBuilder);
        //设置排序
        search.addSort("age", SortOrder.DESC);
        //分页
        search.setFrom(0);
        search.setSize(5);
        //提交
        SearchResponse searchResponse = search.get();
        //命中的内容和
        SearchHits hits = searchResponse.getHits();
        System.out.println("命中条数+"+hits.getTotalHits());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSource());
        }
    }
}
View Code

 

标签:map,java,查询,client,bool,TransportClient,put,jiedada,public
来源: https://www.cnblogs.com/xiaoruirui/p/13617092.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有