草庐IT

ES常用查询操作学习总结(13种)

yhd0416 2024-05-31 原文

目录

1、id和ids

id

ids

2、match查询

查询所有

查看分词效果

1、将《浙江省》进行中文分词《浙江》《浙江省》《省》2、将分词结果逐一匹配词条特点:先分词.,再拿词去匹配倒排索引

bool match:query的值不会被分词,直接匹配词条,默认and

query的值先分词,再匹配词条

multi_match:多域查询,query的值会分词,然后在多个域中匹配词条,只要其中一个域能匹配即可

关键字检索,可以使用match进行检索,因为match是先分词再匹配词条 

3、term 查询

term:不分词直接匹配词条,按物品分类或者品牌这类检索,可以使用term检索

4、prefix 查询

prefix:词条以指定的value为前缀的

5、wildcard 查询

wildcard:不分词通配符的方式匹配词条 ,*指任意内容        ?指任意一个内容        ??指任意两个内容

6、range 查询

范围查询,gte为大于等于,lte为小于等于

7、分页查询

from+size:先查询所有,from:从1开始查(从0角标开始) size:每页显示两条

8、复合查询

must:求交集,must 多个查询单元必须同时匹配

must not:取反,must not 多个查询单元 必须都不匹配(address既不能等于“河北河南”,age既不能大于30小于36)

should:并集,多个查询单元满足其中一个条件即可

9、高亮查询

单个域的高亮

多个域的高亮  

10、boosting查询

影响文档分数的因素:

1、当查询的关键字在文档出现的频次越高,分数越高

2、指定的文档内容越短,分数越高,如查找的是黄花鱼,指定文档内容就是黄花鱼

11、过滤

查询结果过滤掉不想要的文档

影响分数值score:​编辑

 过滤 filter是不影响分数的

12、排序

desc:降序 asc:升序

13、聚合

Elasticsearch中的聚合,包含多种类型,最常用的两种,一个叫度量(metrics):,一个叫桶(bucket)

度量(metrics)

桶(bucket)

1、id和ids

id

GET es_user/_doc/1

ids

 GET es_user/_search             //批量查询
{
  "query": {
    "ids":  {"values": [1,2,3]}
  }
}

2、match查询

查询所有

GET es_user/_search
{
  "query": {
    "match_all": {}
  }
}

查看分词效果

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "浙江省杭州市浙江大学"
}

1、将《浙江省》进行中文分词《浙江》《浙江省》《省》
2、将分词结果逐一匹配词条
特点:先分词.,再拿词去匹配倒排索引

GET es_user/_search
{
  "query": {
    "match": {
      "address": "浙江省"
    }
  }
}

bool match:query的值不会被分词,直接匹配词条,默认and

GET es_user/_search
{
  "query": {
    "match": {
      "address": {
        "query": "浙江我爱杭州",
        "operator": "and"
      }
    }
  }
}

query的值先分词,再匹配词条

GET es_user/_search
{
  "query": {
    "match": {
      "address": {
        "query": "浙江我爱杭州",
        "operator": "or"
      }
    }
  }
}

multi_match:多域查询,query的值会分词,然后在多个域中匹配词条,只要其中一个域能匹配即可

GET es_user/_search
{
  "query": {
    "multi_match": {
      "query": "我爱中国",
      "fields": ["address","email"]
    }
  }
}

关键字检索,可以使用match进行检索,因为match是先分词再匹配词条 

3、term 查询

term:不分词直接匹配词条,按物品分类或者品牌这类检索,可以使用term检索

GET es_user/_search
{
  "query": {
    "term": {
      "address": {
        "value": "杭州好地方"
      }
    }
  }
}

4、prefix 查询

prefix:词条以指定的value为前缀的

GET es_user/_search
{
  "query": {
    "prefix": {
      "address": {
        "value": "杭"
      }
    }
  }
}

5、wildcard 查询

wildcard:不分词通配符的方式匹配词条 ,*指任意内容        ?指任意一个内容        ??指任意两个内容

GET es_user/_search    
{
  "query": {
    "wildcard": {
      "address": {
        "value": "杭州*"
      }
    }
  }
}

    GET es_user/_search
    {
      "query": {
        "wildcard": {
          "address": {
            "value": "杭州??"
          }
        }
      }
    }

6、range 查询

范围查询,gte为大于等于,lte为小于等于

POST es_user/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 32,
        "lte": 36
      }
    }
  }
}

7、分页查询

from+size:先查询所有,from:从1开始查(从0角标开始) size:每页显示两条

POST es_user/_search
{
  "from": 0,
  "size": 2, 
  "query": {
    "match_all": {
      
    }
  }
}

8、复合查询

must:求交集,must 多个查询单元必须同时匹配

GET es_user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "address": {
              "value": "浙江省"
            }
          }
        },
        {
          "range": {
            "balance": {
              "gte": 5600,
              "lte": 6000
            }
          }
        }
      ]
    }
  }
}

must not:取反,must not 多个查询单元 必须都不匹配(address既不能等于“河北河南”,age既不能大于30小于36)

GET es_user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "address": "河北河南"
          }
        },
        {
          "range": {
            "age": {
              "gte": 30,
              "lte": 36
            }
          }
        }
        
      ]
    }
  }
}

should:并集,多个查询单元满足其中一个条件即可

GET es_user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "address": "河南河北"
          }
        },
        {
          "range": {
            "age": {
              "gte": 30,
              "lte": 36
            }
          }
        }
        
      ]
    }
  }
}

9、高亮查询

单个域的高亮

GET es_user/_search
{
  "query": {
    "match": {
      "address": "浙江"
    }
  },
  "highlight": {
    "fields": {
      "address": {}
    },
    "pre_tags": "<span stytle='color:red>",
    "post_tags": "</span>"
  }
}

多个域的高亮  

GET es_user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "address": "浙江"
          }
        },
        {
          "match": {
            "email": "hattiebond"
          }
        }
      ]
    }
  },
  "highlight": {
    "fields": {
      "address": {},
      "email": {}
    },
    "pre_tags": "<font color='red'>",
    "post_tags": "</font>"   
  }
}

10、boosting查询

影响文档分数的因素:

1、当查询的关键字在文档出现的频次越高,分数越高

2、指定的文档内容越短,分数越高,如查找的是黄花鱼,指定文档内容就是黄花鱼

positive、negative、negative_boost 要写完整,不然运行报status:400

设置的negative_boost 值可以把 "_score" 的 值,增加或者减少,影响文档默认排序的分数score

GET es_user/_search
{
  "query": {
    "boosting": {
      "positive": {
        "match": {
          "address": "浙江省"
        }
      },
      "negative": {
        "match": {
          "job": "后端"
        }
      },
      "negative_boost": 5
    }
  }
}

11、过滤

查询结果过滤掉不想要的文档

过滤和查询都能起到对结果集的过滤效果,但是查询会影响到文档的评分及排名,而过滤不会。如果我们需要在查询结果中进行过滤,并且不希望过滤条件影响评分,那么就不要把过滤条件作为查询条件来用。而是使用filter方式

影响分数值score:

 过滤 filter是不影响分数的

GET /es_user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "address": "杭州人"
          }
        }
        
      ],
      "filter": [
        {
          "term": {
            "job": "工程师"
          }
        }
      ]
    }
  }
}

12、排序

desc:降序 asc:升序

GET /es_user/_search
{
 
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "address": "杭州人"
          }
        }
        
      ],
      "filter": [
        {
          "term": {
            "job": "工程师"
          }
        }
      ]
    }
   
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

13、聚合

Elasticsearch中的聚合,包含多种类型,最常用的两种,一个叫度量(metrics):,一个叫桶(bucket)

度量(metrics)

分组完成以后,我们一般会对组中的数据进行聚合运算,例如求平均值、最大、最小、求和等,这些在ES中称为度量

比较常用的一些度量聚合方式:

  • Avg Aggregation:求平均值

  • Max Aggregation:求最大值

  • Min Aggregation:求最小值

  • Percentiles Aggregation:求百分比

  • Stats Aggregation:同时返回avg、max、min、sum、count等

  • Sum Aggregation:求和

  • Top hits Aggregation:求前几

  • Value Count Aggregation:求总数

  • ……

//求平均年龄、最大年龄、最小年龄以及求和
GET /es_user/_search
{
  "query": {
    "match": {
      "address": "杭州"
    }
  },
  "aggs": {
    "age_avg": {
      "avg": {
        "field": "age"
      }
    },
    "max_age":{
      "max": {
        "field": "age"
      }
    },
    "min_age":{
      "min": {
        "field": "age"
      }
    },
    "sum_age":{
      "sum": {
        "field": "age"
      }
    }           
  }
}

桶(bucket)

桶的作用,是按照某种方式(或某个条件)对数据进行分组,每一组数据在ES中称为一个桶 比如:职位

size的值,指列出几种数据。

GET /es_user/_search
{
  "query": {
    "match": {
      "address": "杭州市"
    }
  },
  "aggs": {
    "job_group": {
      "terms": {
        "field": "job.keyword",
        "size": 10

      }
    }
  }
}

有关ES常用查询操作学习总结(13种)的更多相关文章

  1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  2. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  3. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  4. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  5. ruby - 安装libv8(3.11.8.13)出错,Bundler无法继续 - 2

    运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin

  6. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  7. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  8. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  9. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  10. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

随机推荐