elasticsearch__2__java操作之数据搜索查询



elasticsearch 分布式搜索系列专栏:http://blog.csdn.net/xiaohulunb/article/category/2399789

内容涉及代码GitHub地址: 点击打开链接




数据搜索、修改数据操作

/**
     * 搜索,通过Id搜索API
     *
     * @param id
     */
    public void searchById(String id) {
        GetResponse responsere = client.prepareGet(INDEX_DEMO_01, INDEX_DEMO_01_MAPPING, id)
                /*
                设置线程
     当删除api在同一个节点上执行时(在一个分片中执行一个api会分配到同一个服务器上),
     删除api允许执行前设置线程模式 (operationThreaded选项),operationThreaded这个选项是使这个操作在另外一个线程中执行,
     或在一个正在请求的线程 (假设这个api仍是异步的)中执行。
     默认的话operationThreaded会设置成true,这意味着这个操作将在一个不同的线程中执行。
     下面是 设置成false的方法:
                 */
                .setOperationThreaded(false)
                .execute()
                .actionGet();
        if (responsere.isExists()) {
            System.out.println("通过Id=[" + id + "]搜索结果:\n" + responsere.getSourceAsString());
        } else {
            System.out.println("通过Id=[" + id + "]搜索结果:不存在");
        }

    }

    /**
     * 搜索,Query搜索API
     * 条件组合查询
     */
    public void searchByQuery() {

        //qb1构造了一个TermQuery,对name这个字段进行项搜索,项是最小的索引片段,这个查询对应lucene本身的TermQuery
        QueryBuilder queryBuilder1 = QueryBuilders.termQuery("name", "葫芦2娃");

        //qb2构造了一个组合查询(BoolQuery),其对应lucene本身的BooleanQuery,可以通过must、should、mustNot方法对QueryBuilder进行组合,形成多条件查询
        QueryBuilder queryBuilder2 = QueryBuilders.boolQuery()
                .must(QueryBuilders.termQuery("note", "test1"))
                .must(QueryBuilders.termQuery("note", "test4"))
                .mustNot(QueryBuilders.termQuery("note", "test2"))
                .should(QueryBuilders.termQuery("note", "test3"));

        //直接执行搜索
        SearchHit[] searchHitsBySearch = client.search(new SearchRequest(INDEX_DEMO_01)
                        .types(INDEX_DEMO_01_MAPPING)
                        .source(
                                SearchSourceBuilder.searchSource()
                                        .sort("age")
                        )
        )
                .actionGet()
                .getHits()
                .hits();


        //预准备执行搜索

        client.prepareSearch(INDEX_DEMO_01)
                .setTypes(INDEX_DEMO_01_MAPPING)
                        // .setSearchType(SearchType.SCAN)
                //.setQuery(queryBuilder1)
                        //.setQuery(QueryBuilders.termQuery("multi", "test"))       // Query
                //.setPostFilter(FilterBuilders.rangeFilter("age").lt(10).gt(50))   // Filter过滤
                //.setPostFilter(FilterBuilders.inFilter("age", 45))   // Filter过滤
                .setPostFilter(FilterBuilders.boolFilter().mustNot(FilterBuilders.inFilter("age", 20, 21, 22)))
                .setFrom(0).setSize(60).setExplain(true)
                .execute()
                        //注册监听事件
                .addListener(new ActionListener<SearchResponse>() {
                    @Override
                    public void onResponse(SearchResponse searchResponse) {
                        SearchHit[] searchHitsByPrepareSearch = searchResponse.getHits().hits();
                        //获取结果集
                        for (SearchHit searchHit : searchHitsByPrepareSearch) {
                            System.out.println(searchHit.getSourceAsString());
                        }
                    }

                    @Override
                    public void onFailure(Throwable e) {

                    }
                });
    }

    /**
     * 搜索,Query搜索API
     * count查询
     */
    public void searchByQuery_Count() {

        long countByCount = client.count(
                new CountRequest(INDEX_DEMO_01).types(INDEX_DEMO_01_MAPPING)
        )
                .actionGet()
                .getCount();

        //预准备
        long countByPrepareCount = client.prepareCount(INDEX_DEMO_01)
                .setTypes(INDEX_DEMO_01_MAPPING)
                .setQuery(QueryBuilders.termQuery("name", "葫芦1娃"))
                .execute()
                .actionGet()
                .getCount();
        System.out.println("searchByQuery_Count<{}>:" + countByCount);
    }

    /**
     * 修改
     */
    public void updateByQuery() throws IOException {

        boolean isCreatedByUpdate = client.update(new UpdateRequest(INDEX_DEMO_01, INDEX_DEMO_01_MAPPING, "TKLkVot6SJu429zpJbFN3g")
                        .doc(XContentFactory.jsonBuilder()
                                        .startObject()
                                        .field("name", "liw")
                                        .field("age", "25")
                                        .endObject()
                        )
        )
                .actionGet()
                .isCreated();
        //预准备
        client.prepareUpdate(INDEX_DEMO_01, INDEX_DEMO_01_MAPPING, "TKLkVot6SJu429zpJbFN3g")
                .setDoc("age", "18")
                .execute()
                .actionGet();
    }


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值