elasticsearch查询操作(语句方式)

这篇具有很好参考价值的文章主要介绍了elasticsearch查询操作(语句方式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明:本文介绍在kibana,es的可视化界面上对文档的查询操作;

添加数据

先使用API,创建索引库,并且把数据从MySQL中查出来,传到ES上,参考(elasticsearch操作(API方式))

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

索引库(student)结构;

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

1、模糊查询

模糊查询,是指字段类型是“text”,参与分词的字段,如name、all字段;

(1)全部查询;

格式:

# 1.1 全部查询
GET /索引库名/_search
{
  "query": {
    "match_all": {}
  }
}

可以看到,13条文档都查询出来了;

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

(2)单字段查询;

格式:

# 1.2 单字段查询
GET /索引库名/_search
{
  "query": {
    "match": {
      "字段名": "字段值"
    }
  }
}

查询结果:

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

(3)多字段查询;

格式:

# 1.3 多字段查询
GET /索引库名/_search
{
  "query": {
    "multi_match": {
      "query": "字段值",
      "fields": ["字段名1","字段名2"]
    }
  }
}

查询结果:

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

2、精确查询

精确查询,用于等值判断的文档,即查询的值等于文档中对应字段的值,有两种,分别是term、range;

(1)term查询;

格式:

GET /索引库/_search
{
  "query": {
    "term": {
      "字段名": {
        "value": "字段值"
      }
    }
  }
}

查询结果:

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

(2)range查询;

格式:

# 2.2 精确查询之range:job>=1 and job < 3
GET /索引库名/_search
{
  "query": {
    "range": {
      "字段名": {
        "gte": 字段值≥,
        "lt": 字段值<
      }
    }
  }
}

查询结果:

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

3、地理坐标查询

es提供了地理坐标数据类型(如geo_point),如果文档中有由经纬度组成的位置数据,可以针对文档中的经纬度坐标查询,有两种方式:

(1)矩形范围;

根据提供的两个位置,画出一个矩形,查询位置在这个矩形内的文档;

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

格式:

GET /索引库名/_search
{
  "query": {
    "geo_bounding_box":{
      "location":{
        "top_left":{
          "lat":左上角位置纬度,
          "lon":左上角位置经度
        },
        "bottom_right":{
          "lat":右下角位置纬度,
          "lon":右下角位置经度
        }
      }
    }
  }
}

(2)方圆范围;

根据提供的一个位置,一个距离,以位置为圆心,距离为半径,查询该位置方圆范围的文档;

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

格式:

# 3.2 地理查询值geo_distance
GET /索引库名/_search
{
  "query": {
    "geo_distance":{
      "distance":"距离",
      "location":"纬度,经度"
    }
  }
}

距离可以可以写任意长度单位,如15km,15000m;

4、复合查询

(1)算分查询;

查询的每条文档都会有一个分值,这个分值是ES根据BM25公式计算得出的,查询结果会按照分值从高到低排序,我们可以根据文档中的条件,来手动调整该分值,使分值高的文档排在最前面;

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

比如,我们把ID为13的文档,手动修改分值,使其排在最前面;

格式:

# 4.1 算分查询
GET /student/_search
{
  "query": {
    "function_score": {
      "query": {
      	# 查询
        "match_all": {}
      },
      "functions": [
        {
          "filter": {
          	# 过滤
            "term": {
              "id": "13"
            }
          },
          # 设置权重
          "weight": 10
        }
      ],
      # 加权模式,即最终分值 = 查询分值 ? 权重的运算符,multiply为乘
      "boost_mode": "multiply"
    }
  }
}

boost_mode常见的有multiply(乘),sum(加),replace(替换,即使用权重替换掉查询分值);

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

(2)布尔查询;

布尔查询也叫复合查询,指多条件的查询,该查询下有以下四个子查询,可根据实际需要添加:

  • must:必须匹配的子查询,类似“与”;

  • should:选择性匹配子查询,类似“或”;

  • must_not:必须不匹配,不参与算分,类似“非”;

  • filter:必须匹配,不参与算分;

如查询性别为“1”,job不在(2,4]区间内,id为11的文档,all字段可以为123456,DSL语句如下:

# 4.2 布尔查询
GET /student/_search
{
  "query": {
    "bool": {
      # 必须匹配的子查询
      "must": [
        {
          "match": {
            "gender": "1"
          }
        }
      ],
      # 必须不能匹配的子查询
      "must_not": [
        {
          "range": {
            "job": {
              "gt": 2,
              "lte": 4
            }
          }
        }
      ],
      # 可以匹配的子查询
      "should": [
        {
          "match": {
            "all": "123456"
          }
        }
      ],
      # 必须匹配的子查询
      "filter": [
        {
          "term": {
            "id": "11"
          }
        }
      ]
    }
  }
}

must、should参与算分,即分值高低决定排序前后顺序;

must_not、filter不参与算分,分值高低无所谓;

5、排序

(1)按位置排序

如果文档字段中有位置/坐标相关的字段,可将查询结果按照位置排序,距离越近排序越靠前;

表示按照提供的位置,距离该位置越近,排序越靠前,当然这取决于order是不是升序(asc);

# 5.1 按照坐标排序
GET /索引库名/_search
{
  "query": {
    "match_all": {}
  }
  , "sort": [
    {
      "_geo_distance": {
        # 文档中位置相关的字段名、字段值
        "字段名": {
          "lat": 纬度,
          "lon": 经度
        },
        # 升序
        "order": "asc",
        # 距离单位
        "unit": "km"
      }
    }
  ]
}

(2)按字段值排序

如按照job的值降序,越高排序越靠前;

格式:

# 5.2 按照字段值排序
GET /索引库名/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "字段名": {
        "order": "desc"
      }
    }
  ]
}

查询结果,job越高排序越靠前;

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

(3)按多个字段值排序

如果有多个值参与排序,可在sort里面按照顺序写多个值;

如按照job降序,job相同再按照gender升序;

格式:

# 5.3 按照多个字段值排序
GET /索引库名/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "字段值1": {
        "order": "desc"
      },
      "字段值2": {
        "order": "asc"
      }
    }
  ]
}

也可以写在外面的大括号里面,效果一样,如下:

# 5.3 按照多个字段值排序
GET /索引库名/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "字段值1": {
        "order": "desc"
      }
    },
    {
      "字段值2": {
        "order": "asc"
      }
    }
  ]
}

6、分页

es默认查询只显示前10条,可以使用分页输出,输出更多内容;目前es常用的分页有两种方式:

  • 方式一:指定起始(from)、条数分页(size);

  • 方式二:基于上一次查询(search_after)的结果,取值作为参数,设置条数,分页查询;

(1)方式一:

如查询起始ID为5,条数为5的文档内容;

# 6.1 分页:方式一
GET /student/_search
{
  "query": {
    "match_all": {}
  },
  "from": 起始位置,
  "size": 条数
}

注意from的值是从0开始计算的,所以需要 - 1;

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

(2)方式二

如方式一中,可以取出查询结果中的ID值,作为search_after的参数,往后查询4条

# 6.2 分页:方式二
GET /student/_search
{
  "query": {
    "match_all": {}
  },
  "size": 4,
  "search_after":["5"],
  "sort": [
    {
      "id": {
        "order": "asc"
      }
    }
  ]
}

查询结果:

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

小结

  • 方式一查询,需要注意 from + size不能超过10000 ,不然会报错;

(4 + 9996 = 10000 不会报错)

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

(4 + 9997 = 10001 超过10000报错)

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

方式二(search_after)分页查询,需要注意,字段尽量使用主键字段或者唯一字段,不然在设置上次查询的值时,该值如果在上次查询的结果中有多条,会选择最后一条文档作为search_after的位置,这样可能会跳过一些文档。

7、高亮

高亮是指对查询的结果,可选择字段特殊显示。如百度中查询的结果,关键字会呈红色字体显示,具体实现就是把关键词前后加一个css样式;

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

例如我这里把查询的结果,name字段斜体显示,如下:

# 7. 高亮
GET /student/_search
{
  "query": {
    "match": {
      "all":"鲁迅"
    }
  },
  "highlight": {
    "fields": {
      "name":{
      	# 关键词前
        "pre_tags": "<em>",
        # 关键词后
        "post_tags": "</em>",
        # 此字段是否为match匹配的字段,选择false,因为我上面没有按照name进行匹配查找
        "require_field_match": "false"
      }
    }
  }
}

查询结果可以看到,鲁迅前后被em标签包裹

elasticsearch 搜索语句,elasticsearch,搜索引擎,java

总结

以上DSL语句不可直接复制使用文章来源地址https://www.toymoban.com/news/detail-759386.html

到了这里,关于elasticsearch查询操作(语句方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何通过内网穿透实现Java远程连接操作本地Elasticsearch开源搜索和分析引擎

    本文主要介绍在无公网ip环境,如何使用cpolar内网穿透工具实现Java远程连接操作本地Elasticsearch开源搜索和分析引擎。 Cpolar内网穿透提供了更高的安全性和隐私保护,通过使用加密通信通道,Cpolar技术可以确保数据传输的安全性,这为用户和团队提供了更可靠的保护,使他们

    2024年01月23日
    浏览(55)
  • Java SpringBoot API 实现ES(Elasticsearch)搜索引擎的一系列操作(超详细)(模拟数据库操作)

    小编使用的是elasticsearch-7.3.2 基础说明: 启动:进入elasticsearch-7.3.2/bin目录,双击elasticsearch.bat进行启动,当出现一下界面说明,启动成功。也可以访问http://localhost:9200/ 启动ES管理:进入elasticsearch-head-master文件夹,然后进入cmd命令界面,输入npm run start 即可启动。访问http

    2024年02月04日
    浏览(57)
  • elasticsearch(ES)分布式搜索引擎01——(初识ES,索引库操作和文档操作,RestClient操作索引库和文档)

    1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 1.1.2.ELK技术栈 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域: 而elasticsearc

    2024年02月07日
    浏览(62)
  • elasticsearch查询操作(语句方式)

    说明:本文介绍在kibana,es的可视化界面上对文档的查询操作; 先使用API,创建索引库,并且把数据从MySQL中查出来,传到ES上,参考(elasticsearch操作(API方式)) 索引库(student)结构; 模糊查询,是指字段类型是“text”,参与分词的字段,如name、all字段; (1)全部查询

    2024年02月04日
    浏览(39)
  • 分布式搜索引擎ElasticSearch——搜索功能

    DSL查询分类 DSL官方文档 全文检索查询 精确查询 地理查询 复合查询 Function Score Query function score query Boolean Query 排序 分页 官方文档 高亮 快速入门 match,term,range,bool查询 排序和分页 高亮显示 就是在前面抽取的解析代码中进一步添加关于高亮的解析部分,因为highlight和so

    2024年02月01日
    浏览(54)
  • 分布式搜索引擎——elasticsearch搜索功能

    Elasticsearch提供了基于JSON的DSL (Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query multi_match_query 精确查询:根据精确词条

    2024年02月05日
    浏览(67)
  • Elasticsearch全文搜索引擎

    Elasticsearch全文搜索引擎 Elasticsearch简介 windows平台下安装ES 学习ES的预备知识 ES索引操作 ES文档操作 ES高级查询 Golang操作ES起步 Golang操作ES索引 Golang操作ES文档 Golang ES高级查询 Gin集成ES

    2024年02月09日
    浏览(48)
  • Elasticsearch 搜索引擎

    一、创建索引库 *put* *http://localhost:9200/* *索引库名称* PUT http://localhost:9200/xc_course number_of_shards:设置分片的数量,在集群中通常设置多个分片,表示一个索引库将拆分成多片分别存储不同 的结点,提高了ES的处理能力和高可用性,入门程序使用单机环境,这里设置为1。 numb

    2024年02月01日
    浏览(45)
  • 如何查询网站是否被搜索引擎收录

    怎么看网站有没有被百度收录 对于网站所有者来说,了解自己的网站是否被百度搜索引擎收录是非常重要的。只有被收录,网站才能在百度搜索结果中展现,从而获取流量和曝光。下面介绍几种方法,让您快速了解自己的网站是否被百度收录。 这是最简单直接的方法。在百

    2024年04月14日
    浏览(34)
  • 关于Elasticsearch全文搜索引擎

    我们可以把它简称为ES,但是搜索它的资料时(例如百度)还是使用Elasticsearch进行搜索更准确, 这个软件不再是SpringCloud提供的,它也不针对微服务环境的项目来开发 Elasticsearch和redismysql一样,不仅服务于java语言,其它语言也可以使用,它的功能也类似一个数据库,能高效的从

    2024年02月05日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包