1、term和terms
term和terms等查询,不会对查询对字段进行分词处理,适合于date、num、id等确切数据进行搜索

如果需要查询keywords,则查询等keywords必须是查询字段中可以分出来的词,如果不是,则无法查询到数据。

例如:age字段包含的值为80后、90后。使用term查询,{"term":{"age":"80后"}} 这样是无法查询到age是"80后"的数据的,因为term不会对"80后"进行分词,而es中存储的age字段,会把"80后"分成“80”和“后”,没有“80后”,所以使用term无法查询到

term查询某一个关键词的数据:

# 查询content含有“学习”关键词的数据

GET index_1/_search

{
"query": {
"bool": {
"filter": {
"term": {
"content": "学习"
}
}
}
}
}

  

terms查询某些关键词的数据:

# 查询content中含有“学习”和“生活”的数据

GET index_1/_search

{
"query": {
"bool": {
"filter": {
"terms": {
"content": [
"学习",
"生活"
]
}
}
}
}
}

  

2、match
match的所有方法,都会对字段进行分词,所查询的字段数据只要包含分词后结果的一个,就会被查询到

例如:age的数据包含有80后、90后,使用 {"match":{"age":"80后"}} 查询,会把所有的数据都查询出来。

分析:match会把“80后”分词为“80”和“后”,而es也会讲age分词为“80“、“后”,“90”、“后”,所有数据都包含”后“,所以会被全部查找出来

match查找age是80后的字段:

GET index_1/_search

{
"query": {
"bool": {
"filter": {
"match": {
"age": "80后"
}
}
}
}
} 结果:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 6433,
"max_score": 0,
"hits": [
{
"_index": "index_1",
"_type": "type_1",
"_id": "1",
"_score": 0,
"_source": {
"age": "70后"
...}
},
{
"_index": "index_1",
"_type": "type_1",
"_id": "2",
"_score": 0,
"_source": {
"age": "80后"
...}
},
{
"_index": "index_1",
"_type": "type_1",
"_id": "2",
"_score": 0,
"_source": {
"age": "90后"
...}
}
]
}
}

  

match_phrase:短语匹配查询,必须匹配短语中的所有分词,并且保证各个分词的相对位置不变

例如:age的数据包含有80后、90后,使用 {"match_phrase":{"age":"80后"}} 查询,只会把age字段是“80后”的数据查询出来。

分析:match_phrase会把“80后”分词为“80”和“后”,而es也会讲age分词为“80“、“后”,“90”、“后”,查询的时候,只会查询“80”后面的分词是“后”的数据

match_phrase查找age是80后的字段:

GET index_1/_search

{
"query": {
"bool": {
"filter": {
"match_phrase": {
"age": "80后"
}
}
}
}
} 结果:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 6433,
"max_score": 0,
"hits": [
{
"_index": "index_1",
"_type": "type_1",
"_id": "1",
"_score": 0,
"_source": {
"age": "80后"
...}
},
{
"_index": "index_1",
"_type": "type_1",
"_id": "2",
"_score": 0,
"_source": {
"age": "80后"
...}
},
{
"_index": "index_1",
"_type": "type_1",
"_id": "2",
"_score": 0,
"_source": {
"age": "80后"
...}
}
]
}
}

  

multi_match:查询多个字段包含某个关键词的数据

# 查询content或education中含有"大学"的数据

GET index_1/_search

{
"query": {
"bool": {
"filter": {
"multi_match": {
"query": "大学",
"fields": ["content", "education"]
}
}
}
}
}

  

match_all:查询所有文档

GET index_1/_search

{
"query": {
"match_all": {}
}
}

  

3、range

range范围查找,查找某一范围的所有数据

gt:大于

gte:大于等于

lt:小于

lte:小于等于

# 查询时间大于等于2019-08-10 10:08:29,小于等于2019-08-13 10:08:29的数据

GET index_4/_search

{
"query": {
"bool": {
"filter": {
"range": {
"date": {
"gte": "2019-08-10 10:08:29",
"lte": "2019-08-13 10:08:29"
}
}
}
}
}
}

  

4、sort

sort按照某些字段对数据进行排序,可以是一个字段,也可以是多个字段

desc:降序

asc:生序

# 查询数据按照时间的降序排列

GET index_1/_search

{
"sort": [
{
"date": {
"order": "desc"
}
}
],
"query": {
"match_all": {}
}
}

  

5、_source

对于搜索的结果,只关注某些字段的值

# 查询所有的数据的name和age

GET index_1/_search

{
"_source": ["name", "age"],
"query": {
"match_all": {}
}
}

  

6、from和size

from:从某个位置开始查询,最小为0,某些情况下可以为-1(下一篇说明)

size:查询长度

from+size不能大于10000,否则es会报错(下一篇解决)

# 查询前20条数据,并按照date的降序排列

GET index_1/_search

{
"from": 0,
"size": 20,
"sort": [
{
"date": {
"order": "desc"
}
}
],
"query": {
"match_all": {}
}
}

  

7、fuzzy
模糊匹配

value:查询包含某关键字

boost:增加查询的权值,默认值是1.0,必须于value同用,涉及字段_score(es默认按照_score排序)

fuzziness:设置匹配的最小相似度,默认值0.5,对于字符串,取值0-1(包括0和1);对于数值,取值可能大于1;对于日期取值为1d,1m等

prefix_length:公共前缀长度,默认为0

max_expansions:指定可被扩大到的最大词条数,默认为无限制

GET index_4/_search

{
"query": {
"fuzzy": {
"type": {
"value": "分期",
"boost": 0.5
}
}
}
}

  

8、wildcard

通配符查询

*:匹配0或多个字符

?:匹配任意字符

注意:使用wildcard的字段类型需要是keyword,切不分词;尽量少用,效率较低

GET index_1/_search

{
"query": {
"wildcard": {
"content": {
"value": "*学习*"
}
}
}
}

 采自于 https://blog.csdn.net/Misaki_root/article/details/101203647?spm=1001.2014.3001.5501

elasticsearch搜索引擎的常用方法的更多相关文章

  1. elasticsearch搜索引擎环境的搭建

    elasticsearch 搜索引擎 解决了什么问题:在我们数据量很大时,我们使用模糊查询会使索引列的索引消失,这样使用elasticsearch来提高查询效率. 存在什么问题:有时我们查询的词,el ...

  2. 第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索

    第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到 ...

  3. 第三百七十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索结果分页

    第三百七十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索结果分页 逻辑处理函数 计算搜索耗时 在开始搜索前:start_time ...

  4. 第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能

    第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能 Django实现搜索功能 1.在Django配置搜索结果页的路由映 ...

  5. 第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

    第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.e ...

  6. 第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中

    第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中 前面我们讲到的elasticsearch( ...

  7. 第三百六十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询

    第三百六十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询 bool查询说明 filter:[],字段的过滤,不参与打分must:[] ...

  8. 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询

    第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...

  9. 第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理

    第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字 ...

随机推荐

  1. 使用docker快速部署一个consul集群

    作为一个开发者,有时候需要一个集群环境,之前的做法要么就是使用多个虚拟机,要么就是采用不同的端口来模拟,但是虚拟机比较占内存,而且启动慢,采用不同的端口来模拟,管理起来比较麻烦一些,程序隔离性差一些. ...

  2. Selenium_获取元素文本、属性值、尺寸(8)

    from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get(" ...

  3. Flask_响应(四)

    响应即视图函数的返回值,前面的例子的返回值都很简单,直接返回值.但是Flask Http协议的返回值中通常还会有以下几种不同的方式. 一.return元组 通过return一个元组构造响应信息. 语法 ...

  4. Go语言系列之日志库zap

    在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 能够将事件记录到文件中,而不是应用程序控制台. 日志切割-能够根据文件大小.时间或间隔等来切割日志文件. 支持不同的日志级别.例 ...

  5. Kube-OVN 1.2.0发布,携手社区成员打造高性能容器网络

    Kube-OVN 1.2.0 新版本如期而至,支持 Vlan 和 OVS-DPDK 两种类型的高性能网络接口.本次发布得益于社区的壮大,感谢Intel爱尔兰开发团队与锐捷网络开发团队持续积极参与Kub ...

  6. Keil MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡TF卡读写

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  7. preg_match绕过总结

    preg_match绕过总结 什么是preg_match 绕过方法 1.数组绕过 preg_match只能处理字符串,当传入的subject是数组时会返回false 2.PCRE回溯次数限制 PHP利 ...

  8. 【记录一个问题】铁威马NAS存储中的人人影视APP,其WEB服务占满一个CPU核

    终端登录后,top命令发现rrshareweb这个进程把单个CPU核占满了. 发现其实是人人影视的web服务,而这个服务里面我还根本未使用. 卸载这个app后正常.

  9. 将Cesium ion上的3D Tiles和Bing imagery应用到osgEarth

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Pelican Mapping 激动的宣布支持加载Cesium ...

  10. MobaXterm中文乱码问题

    现在Xshell和SecureCRT都要收费,本着不用盗版的原则,同时需要标签管理session,快捷命令等功能,最后选择了MobaXterm. 但是使用后发现中文会乱码.后按照博客的方法,修改了终端 ...