黑马程序员技术交流社区

标题: 【郑州校区】条件查询QueryBuilder [打印本页]

作者: 我是楠楠    时间: 2018-10-17 15:30
标题: 【郑州校区】条件查询QueryBuilder
【郑州校区】条件查询QueryBuilder
到目前为止,我们使用了REST API和简单查询或GET请求来搜索数据。更改索引时,无论想执行的操作是更改映射还是文档索引化,都要用REST API向Elasticsearch发送JSON结构的数据。类似地,如果想发送的不是一个简单的查询,仍然把它封装为JSON结构并发送给Elasticsearch。这就是所谓的查询DSL。从更宏观的角度看,Elasticsearch支持两种类型的查询:基本查询和复合查询。
基本查询,如词条查询用于查询实际数据。
第二种查询为复合查询,如布尔查询,可以合并多个查询。
查询数据 主要依赖QueryBuilder对象 ,可以通过QueryBuilders获取各种查询 :(基于lucene)
boolQuery() 布尔查询,可以用来组合多个查询条件
fuzzyQuery() 相似度查询
matchAllQuery() 查询所有数据
regexpQuery() 正则表达式查询
termQuery() 词条查询
wildcardQuery() 模糊查询
使用SearchResponse获取,支持各种查询:
[AppleScript] 纯文本查看 复制代码
 /**
     * 搜索在elasticSearch中创建的文档对象
     */
        @Test
        public void testSearch() throws Exception {
                // 搜索数据
                // get()方法 === execute().actionGet()
                // SearchResponse searchResponse = client.prepareSearch("blob1")
                // .setTypes("article").setQuery(QueryBuilders.matchAllQuery()).get();
                /**
                 * 1、ElasticSearch提供QueryBuileders.queryStringQuery(搜索内容)
                 * 查询方法,对所有字段进行分词查询
                 */
//                SearchResponse searchResponse = client.prepareSearch("blog").setTypes("article")
//                                .setQuery(QueryBuilders.queryStringQuery("全面"))
//                                .get();
                /**
                 * 2、 只想查询content里包含全文 ,使用QueryBuilders.wildcardQuery模糊查询 *任意字符串 ?任意单个字符
                 */
//                SearchResponse searchResponse = client.prepareSearch("blog").setTypes("article")
//                                .setQuery(QueryBuilders.wildcardQuery("content", "*全文*")).get();
                /** 3、 查询content词条为“搜索” 内容,使用TermQuery */
                SearchResponse searchResponse = client.prepareSearch("blog")
                                .setTypes("article")
                                .setQuery(QueryBuilders.termQuery("content", "全文")).get();
                SearchHits hits = searchResponse.getHits(); // 获取命中次数,查询结果有多少对象
                System.out.println("查询结果有:" + hits.getTotalHits() + "条");
                Iterator<SearchHit> iterator = hits.iterator();
                while (iterator.hasNext()) {
                        SearchHit searchHit = iterator.next(); // 每个查询对象
                        System.out.println(searchHit.getSourceAsString()); // 获取字符串格式打印
                        System.out.println("id:" + searchHit.getSource().get("id"));
                        System.out.println("title:" + searchHit.getSource().get("title"));
                        System.out.println("content:" + searchHit.getSource().get("content"));
                        for (Iterator<SearchHitField> ite = searchHit.iterator(); ite.hasNext();) {
                                SearchHitField next = ite.next();
                                System.out.println(next.getValues());
                        }
                }
                // 关闭连接
                client.close();
        }

传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2