ES 查询语法

文章目录

  • 概念介绍
    • 1. URI Search
    • 2. Body Search
      • 查询语法 Query DSL
        • Search APIs
          • 字段类查询
          • 复合查询
        • 聚合查询
        • _cat API
        • count api
  • 常用query
    • 集群
    • 索引
    • 文档
      • 高级搜索
        • match_all 查询所有
        • match 匹配查询
        • multi_match 多字段匹配查询
        • term 关键字精确查询
        • terms 多关键字精确查询
        • range 范围查询
      • 组合查询
        • _source 查询指定字段
        • 过滤字段
        • highlight 高亮


概念介绍

es中的search主要分为URI Search和 body Search

ES 查询语法_第1张图片

1. URI Search

  • 操作简便,方便通过命令进行测试
  • URI Search 仅包含部分查询语法
    ES 查询语法_第2张图片

2. Body Search

  • 搜索条件越来越复杂 url Search会越来越长. 这时候就该用 Body Search了,把搜索条件写在请求体中
  • Body Search 支持完备的 Query DSL 查询语法
    ES 查询语法_第3张图片

查询语法 Query DSL

es提供的一套完整的基于json格式的结构化查询语法

Search APIs

作用:搜索数据,查询语法多,功能强大

_search 为endpoint,主要分为字段类查询和复合查询。
ES 查询语法_第4张图片

字段类查询

只针对某一个字段进行查询

  • 单词匹配:查询语句不做分词处理,直接去匹配字段的倒排索引,

    1. term 不分词

    2. termsES 查询语法_第5张图片

    3. range 用于date或number类型的字段范围查询ES 查询语法_第6张图片

  • 全文匹配:针对text类型的字段进行全文检索,会对查询语句先进行分词处理

    1. match 匹配查询,用评分机制(TF/IDF)进行打分ES 查询语法_第7张图片

    2. match_all 查询所有

    3. multi_match 多字段匹配查询

    4. match_phrase 有顺序要求,查询指定段落

    5. query_string

    6. simple_query_string

复合查询

包含一个或多个字段类查询或者复合查询语句

  • bool :布尔查询由一个或多个布尔子句组成ES 查询语法_第8张图片
    1. must 返回的文档必须满足must子句的条件,并且参与计算分值ES 查询语法_第9张图片
    2. must_not 返回的文档必须不满足定义的条件ES 查询语法_第10张图片
    3. filter 返回的文档必须满足filter子句的条件, 不计算分值ES 查询语法_第11张图片
    4. should 如果没有must或者filter,有一个或者多个should子句,那么只要满足一个就可以返回ES 查询语法_第12张图片
    ES 查询语法_第13张图片

  • constant_scoreES 查询语法_第14张图片
    ES 查询语法_第15张图片

  • dis_max

  • function_score

  • boosting

聚合查询

TODO

_cat API

作用:查询Elasticsearch的相关信息。包括集群中的index数量、运行状态、当前集群所在的ip,

URI Search 作用
GET _cat/ 查看cat支持的所有 endpoint 命令 ,常用:
health:集群健康信息
nodes:集群节点信息(主节点+数据节点)
allocation:集群分配信息(数据节点 与磁盘剩余)
GET _cat/【endpoint】?help 查看该endpoint 数据列含义
GET _cat/【endpoint】?v 查看该endpoint的列名+数据
GET _cat/【endpoint】?v&h=列名1,列名2… 查看指定列
GET _cat/【endpoint】?v&s=列名 指定列排序

count api

返回符合条件的文档数

ES 查询语法_第16张图片

常用query

集群

kibana URI Search 作用
GET / http://IP:9200/ 查看集群信息
GET _cat/health?v 查询集群健康信息
GET _cat/nodes?v 查询集群节点信息
GET _cat/allocation?v 查询集群数据节点信息

索引

method kibana URI Search 作用
GET GET * http://IP:9200/_cat/indices?v 查看所有索引
GET GET {index} http://IP:9200/{索引名称} 查看指定索引

文档

method kibana 等同 URI Search 作用
GET GET /_search 空搜索, 搜索集群 下所有文档
GET GET {index}/_search http://IP:9200/{索引名称}/_search 搜索 索引 下所有文档
GET GET {index}/{type}/_search 搜索 索引/类型 下所有文档
GET GET /_all/{type}/_search 搜索 所有索引/类型 的文档
GET GET {index}/{type}/{id} 索引/类型/id 获取唯一文档
POST GET {index}/_search + {json条件} 高级搜索
{
    QUERY_NAME: {
        FIELD_NAME: {
            ARGUMENT: VALUE,
            ARGUMENT: VALUE,...
        }
    }
}

高级搜索

url 作用
GET {index}/_search + {json条件} 高级搜索
GET /索引库名/_search
{
    "query":{
        "查询类型":{
            "查询条件":"查询条件值"
        }
    }
}

match_all 查询所有

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

match 匹配查询

GET /_search
{
	"query": {
		"match": {
			"price":4000.00
		}
	}
}

multi_match 多字段匹配查询

在多个字段中查询。

GET /_search
{
	"query": {
		"multi_match": {
			"query": "zhangsan",
			"fields": ["name","nickname"]
		}
	}
}

term 关键字精确查询

关键词匹配查询,不对查询条件进行分词

GET /_search
{
	"query": {
		"term": {
			"name": {
				"value": "zhangsan"
			}
		}
	}
}

terms 多关键字精确查询

{
	"query": {
		"terms": {
			"name": ["zhangsan","lisi"]
		}
	}
}

range 范围查询

2019 > timestamp > 2021

{"query": 
  {"bool": 
    {"must": 
      [ {"range": 
      		{"timestamp": 
      			{"from": "2019-05-09T18:25:01.000+0800"},
      			{"to": "2021-05-09T18:25:01.000+0800"}
      		}
        }
      ]
    }
  }
}

组合查询

  • must(必须 )、must_not(必须不)、should(应该)组合查询
    ES 查询语法_第17张图片

_source 查询指定字段

{
	"_source": ["name","nickname"],
	"query": {
		"terms": {
			"nickname": ["zhangsan"]
		}
	}
}

过滤字段

  • includes / excludes过滤字段
    1. includes:来指定想要显示的字段
    2. excludes:来指定不想要显示的字段
{
	"_source": {
		"includes": ["name","nickname"]
	},
	"query": {
		"terms": {
			"nickname": ["zhangsan"]
		}
	}
}

highlight 高亮

{
	"query": {
		"match": {
			"name": "zhangsan"
		}
	},
	"highlight": {
		"pre_tags": "",
		"post_tags": "",
		"fields": {
			"name": {}
		}
	}
}
  • 排序

  • 分页查询

## 默认返回10条,可用size指定返回条数,通过from指定位移
curl 'localhost:9200/accounts/person/_search'  -d '
{
    "query": {
        "match" : {
            "desc" : "软件"
        }
    },
    "from": 1,
    "size": 1
}'


java api

RestClient+SearchSourceBuilder

endPoint
entity/queryStr
BoolQueryBuilder

你可能感兴趣的:(大数据,elasticsearch,自然语言处理)