1.简介

本宝学习ES已经好久了,19年就接触到了ES,但是至今为止还不能随心所欲的操作es。因此这篇文章结合SQL查询数据的语句,来引出对应的ES查询语句。来加深对ES使用的熟练程度。

2.工具

  • es-head:可视化工具,安装google插件
  • sense:这个插件是看一位博主的语雀笔记得到的 https://www.yuque.com/jelly-meonx/ryey1n/de5vtg

    3.实战

    先给大家看一下数据:
    image.png

    3.1等值查询(term)

  • 需求:查询spuId=106的所有数据

  • SQL语句

    1. select * from goods where spuId=106
  • ES查询

    1. GET 10.11.0.182:9200/goods/_search
    2. {
    3. "query": {
    4. "term": {
    5. "spuId": 106
    6. }
    7. }
    8. }

3.2 in查询(terms)

  • 需求:查询spuId 为 44,37,111的所有数据
  • SQL语句

    1. select * from goods where spuId in (44,37,111)
  • ES查询

    1. GET 10.11.0.182:9200/goods/_search
    2. {
    3. "query": {
    4. "terms": {
    5. "spuId": [44,37,111]
    6. }
    7. }
    8. }

3.3范围查询(Range)

  • 需求:查询 1<sales<200的数据
  • SQL语句 ```sql

select * from goods where sales>1 and sales<200

  1. - ES查询
  2. ```json
  3. GET 10.11.0.182:9200/goods/_search
  4. {
  5. "query": {
  6. "range" :{
  7. "sales":{
  8. "gt":1,
  9. "lt":200
  10. }
  11. }
  12. }
  13. }

3.4主键in查询(IDS)

  • 需求:查询id等于 1,2,3的数据
  • SQL语句 ```sql

select * from goods where id in (1,2,3);

  1. - ES查询
  2. ```json
  3. GET 10.11.0.182:9200/goods/_search
  4. {
  5. "query": {
  6. "ids" :{
  7. "values":[1,2,3]
  8. }
  9. }
  10. }

注:es的主键是 _id .

3.5模糊查询(Prefix/Regexp/Wildcard)

在SQL中的模糊查询就是 like关键字搞定的,但是在ES中有三种。

3.5.1前缀模糊查询(Prefix)

  • 需求:查询shopName是以自营开头的
  • SQL语句 ```sql

select * from goods where shopName like “自营%”;

  1. - ES查询
  2. ```json
  3. GET 10.11.0.182:9200/goods/_search
  4. {
  5. "query": {
  6. "prefix" :{
  7. "shopName":{
  8. "value": "自营"
  9. }
  10. }
  11. }
  12. }

3.5.2正则表达式查询(Regexp)

  • 需求: 查询mainTitle 为%黑色% 的数据
  • SQL语句 ```sql

select * from goods where mainTitle like %黑色%;

  1. - ES查询
  2. ```json
  3. GET 10.11.0.182:9200/goods/_search
  4. {
  5. "query": {
  6. "regexp" :{
  7. "mainTitle":{
  8. "value": ".?黑色.?"
  9. }
  10. }
  11. }
  12. }

3.5.3通配符查询(Wildcard)

  • 需求:查询mainTitle 为%黑色% 的数据
  • SQL语句 ```sql

select * from goods where mainTitle like %黑色%;

  1. - ES查询
  2. ```json
  3. GET 10.11.0.182:9200/goods/_search
  4. {
  5. "query": {
  6. "wildcard" :{
  7. "mainTitle":{
  8. "value": "*黑色*"
  9. }
  10. }
  11. }
  12. }