Elasticsearch QueryBuilder简单查询实现解析

elasticsearch中存储的全部文档

1.matchAllQuery()

matchAllQuery()方法用来匹配全部文档

public class QueryTest {
  public static void main(String[] args) {
    //创建对象,设置集群名称和IP地址
    ElasticsearchUtils es = new ElasticsearchUtils("im_shan",
        "localhost");
    String indexName = "school";//索引名称
    String typeName = "student";//类型名称
    //搜索全部文档
    QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
    SearchResponse searchResponse = es.searcher(indexName, typeName,
      queryBuilder);
    SearchHits hits = searchResponse.getHits();
    SearchHit[] searchHits = hits.getHits();
    int i = 0;
    for (SearchHit searchHit : searchHits) {
      String name = (String) searchHit.getSource().get("name");
      String birth = (String) searchHit.getSource().get("birth");
      String interest = (String) searchHit.getSource().get("interest");
      System.out.println("-------------" + (++i) + "------------");
      System.out.println(name);
      System.out.println(birth);
      System.out.println(interest);
    } 

  }
}

控制台将输出全部文档

输出:
-------------1------------
amy
1995-11-10
singing dancing
-------------2------------
angle
1996-05-01
singing reading
-------------3------------
jackson
1995-08-01
basketball music reading
-------------4------------
jack
1995-03-21
football music
-------------5------------
tom
1995-09-11
reading music

2.matchQuery(String name,Object text)

matchQuery("filedname","value")匹配单个字段,匹配字段名为filedname,值为value的文档

java] view plain copy
//单个匹配,搜索name为jack的文档
QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "jack"); 

此时会输出一条记录,因为只有一个name为jack的文档

-------------1------------
jack
1995-03-21
football music 

3.multiMatchQuery(Object text, String... fieldNames)

多个字段匹配某一个值

[java] view plain copy
QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("music",
      "name", "interest");//搜索name中或interest中包含有music的文档(必须与music一致)

控制台输出如下

-------------1------------
jack
1995-03-21
football music
-------------2------------
tom
1995-09-11
reading music
-------------3------------
jackson
1995-08-01
basketball music reading

4.wildcardQuery()模糊查询

模糊查询,?匹配单个字符,*匹配多个字符

WildcardQueryBuilder queryBuilder = QueryBuilders.wildcardQuery("name",
      "*jack*");//搜索名字中含有jack文档(name中只要包含jack即可) 

控制台输出如下

-------------1------------
jackson
1995-08-01
basketball music reading
-------------2------------
jack
1995-03-21
football music

5.使用BoolQueryBuilder进行复合查询

使用must

java] view plain copy
//模糊查询
WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery(
      "name", "*jack*");//搜索名字中含有jack的文档
WildcardQueryBuilder queryBuilder2 = QueryBuilders.wildcardQuery(
      "interest", "*read*");//搜索interest中含有read的文档 

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//name中必须含有jack,interest中必须含有read,相当于and
boolQueryBuilder.must(queryBuilder1);
boolQueryBuilder.must(queryBuilder2);

控制台输出如下(name中必须含有jack,interest中必须含有read,只有一条文档匹配):

-------------1------------
jackson
1995-08-01
basketball music reading 

使用should

WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery(
      "name", "*jack*");//搜索名字中含有jack的文档
WildcardQueryBuilder queryBuilder2 = QueryBuilders.wildcardQuery(
      "interest", "*read*");//搜索interest中含有read的文档 

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//name中含有jack或者interest含有read,相当于or
boolQueryBuilder.should(queryBuilder1);
boolQueryBuilder.should(queryBuilder2);

控制台输出(name中含有jack或者interest中含有read的都将被匹配):

------------1------------
jackson
1995-08-01
basketball music reading
-------------2------------
angle
1996-05-01
singing reading
-------------3------------
jack
1995-03-21
football music
-------------4------------
tom
1995-09-11
reading music

6.分页

通过from和size参数进行分页。From定义查询结果开始位置,size定义返回的hits(一条hit对应一条记录)最大数量。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python-ElasticSearch搜索查询的讲解

    Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上. Lucene 可能是目前存在的,不论开源还是私有的,拥有最先进,高性能和全功能搜索引擎功能的库.但是 Lucene 仅仅只是一个库.为了利用它,你需要编写 Java 程序,并在你的 java 程序里面直接集成 Lucene 包. 更坏的情况是,你需要对信息检索有一定程度的理解才能明白 Lucene 是怎么工作的.Lucene 是 很 复杂的. 在上一篇文章中介绍了ElasticS

  • JAVA使用ElasticSearch查询in和not in的实现方式

    ElasticSearch Elasticsearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便. 最近用到ES查询,因用的是Java写的,需要实现一个需求:过滤一部分id,查询时不需要查出来. 既然需要不包含,那么首先需要实现包含的方式(精确完

  • elasticsearch kibana简单查询讲解

    一.简单的CRUD操作 1.添加 PUT /index/type/id { "json数据" } 2.查询 GET /index/type/id 3.修改 POST /index/type/id/_update { "doc": { "FIELD": "值" } } 4.删除 DELETE /index/type/id 二.搜索 搜索可以分成六大类 1.query string search 2.query DSL 3.que

  • java 使用ElasticSearch完成百万级数据查询附近的人功能

    上一篇文章介绍了ElasticSearch使用Repository和ElasticSearchTemplate完成构建复杂查询条件,简单介绍了ElasticSearch使用地理位置的功能. 这一篇我们来看一下使用ElasticSearch完成大数据量查询附近的人功能,搜索N米范围的内的数据. 准备环境 本机测试使用了ElasticSearch最新版5.5.1,SpringBoot1.5.4,spring-data-ElasticSearch2.1.4. 新建Springboot项目,勾选Elas

  • spring 操作elasticsearch查询使用方法

    最近学习了一下elasticsearch使用,网上的资料又很少,真是一个头两个大.好歹最后终于了解了.留个笔记做日后查询. package com.gooddeep.dev.elasticsearch.commons.dao; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.elasticsearch.action.ActionFuture; import org.elasti

  • Elasticsearch QueryBuilder简单查询实现解析

    elasticsearch中存储的全部文档 1.matchAllQuery() matchAllQuery()方法用来匹配全部文档 public class QueryTest { public static void main(String[] args) { //创建对象,设置集群名称和IP地址 ElasticsearchUtils es = new ElasticsearchUtils("im_shan", "localhost"); String index

  • java使用elasticsearch分组进行聚合查询过程解析

    这篇文章主要介绍了java使用elasticsearch分组进行聚合查询过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 java连接elasticsearch 进行聚合查询进行相应操作 一:对单个字段进行分组求和 1.表结构图片: 根据任务id分组,分别统计出每个任务id下有多少个文字标题 1.SQL:select id, count(*) as sum from task group by taskid; java ES连接工具类 p

  • Spring Boot 集成Elasticsearch模块实现简单查询功能

    目录 背景 系统集成 引入jar包 application.yml文件中添加ES配置 创建文档实体 接口实现 具体实现 基础查询 新增文档 请求参数 Controller实现 返回结果 修改文档 通过id查询文档信息 Controller实现 删除文档 Controller实现 分页查询 Controller实现 返回结果 模糊查询 Controller实现 范围查询 Controller实现 总结 背景 项目中我们经常会用搜索功能,普通的搜索我们可以用一个SQL的like也能实现匹配,但是搜索

  • Java如何使用elasticsearch进行模糊查询

    这篇文章主要介绍了Java如何使用elasticsearch进行模糊查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用环境上篇文章本人已书写过,需要maven坐标,ES连接工具类的请看上一篇文章,以下是内容是笔者在真实项目中运用总结而产生,并写的是主要方法和思路,具体实现大家可以看后面文章,若其中有不适,请大家多多包涵 一.ES模糊查询 (一)不含中文模糊查询,适用于数字 SearchResponse searchResponse=nul

  • Elasticsearch之基本查询及组合查询操作示例

    目录 Elasticsearch查询 一 基本查询 1.1 match查询 1.2 term查询 1.3 terms查询 1.4 控制查询的返回数量(分页) 1.5 match_all 查询 1.6 match_phrase查询 1.7 multi_match 1.8 指定返回的字段 1.9 sort 结果排序 1.10 range范围查询 1.11 wildcard查询 1.12 exists存在 二 组合查询 2.1 bool查询 2.2 简单过滤查询 2.3 查询多个值 2.4 bool过

  • bootstrap导航栏、下拉菜单、表单的简单应用实例解析

    制作效果图如下: 代码如下(以后做东西可以改改就能直接用): <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport"

  • Spring Data JPA 简单查询--方法定义规则(详解)

    一.常用规则速查 1 And 并且 2 Or   或 3 Is,Equals 等于 4 Between   两者之间 5 LessThan 小于 6 LessThanEqual   小于等于 7 GreaterThan 大于 8 GreaterThanEqual   大于等于 9 After 之后(时间) > 10 Before 之前(时间) < 11 IsNull 等于Null 12 IsNotNull,NotNull 不等于Null 13 Like 模糊查询.查询件中需要自己加 % 14

  • Spring Boot整合Elasticsearch实现全文搜索引擎案例解析

    简单说,ElasticSearch(简称 ES)是搜索引擎,是结构化数据的分布式搜索引擎.Elastic Search是一个开源的,分布式,实时搜索和分析引擎.Spring Boot为Elasticsearch及Spring Data Elasticsearch提供的基于它的抽象提供了基本的配置.Spring Boot提供了一个用于聚集依赖的spring-boot-starter-data-elasticsearch 'StarterPOM'. 引入spring-boot-starter-dat

  • flask的orm框架SQLAlchemy查询实现解析

    这篇文章主要介绍了flask的orm框架SQLAlchemy查询实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课程,可以有多个学生修同一门课,同时,一门课也有很多学生. 一对多查询 如果一个项目,有两张表.分别是班级表,学生表. 在设计数据表时,我们给学生表设置一个外键,指向班级表的 id . sqlalchemy

随机推荐