java_es

在查询时过滤掉指定的"_id"的数据

        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();// 对象池配置类,不写也可以,采用默认配置
        poolConfig.setMaxTotal(20);// 采用默认配置maxTotal是8,池中有8个client
        EsClientPoolFactory esClientPoolFactory = new EsClientPoolFactory();// 要池化的对象的工厂类,这个是我们要实现的类
        GenericObjectPool<TransportClient> clientPool = new GenericObjectPool<>(esClientPoolFactory, poolConfig);// 利用对象工厂类和配置类生成对象池
        TransportClient client = clientPool.borrowObject(); // 从池中取一个对象

        IdsQueryBuilder qb = QueryBuilders.idsQuery();
        qb.addIds("AWovvn9TOH-DMBf9QzBp");

        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        boolQueryBuilder.mustNot(qb);

        SearchResponse response = client.prepareSearch("songyan")// 索引
                .setTypes("data_info")// type
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)// 查询类型
                .setQuery(boolQueryBuilder).execute()// 执行
                .actionGet();// get

        clientPool.returnObject(client);
通过qb.addIds("AWovvn9TOH-DMBf9QzBp");添加要过滤的id
对应ES查询语句:
{
    "query": {
        "bool": {
            "must_not": {
                "terms": {
                    "_id": ["AWiWMTO5expQvaQPsaXV", "AWiWMTOvexpQvaQPsaXT", "AWiWQKr5expQvaQPsfVd"]
                }
            }
        }
    }
}
原文地址:https://www.cnblogs.com/excellencesy/p/10731421.html