查询上下文
json
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "user",
"_id": "1",
"_score": 1,
"_source": {
"name": "admin",
"age": 18,
"firends": [
"小明",
"小白",
"小吕"
],
"owner": {
"name": "desc"
}
}
}
]
}
}
- took:查询时间,毫秒
- time_out:是否超时
- _shards:当前请求的分片
- total:分片数量
- successful:成功数量
- skipped:跳过数量
- failed:失败数量
- hits:查询结果
- total:
- value:查询结果条数
- relation:查询方式 如"eq"等于
- max_score:相关度评分
- hits:当前返回的结果
- _index:数据属于的索引
- _type:ES7.0后为_doc
- _id:当前数据id
- _score:当前数据相关度评分
- _source:元数据
相关度评分
在查询时候,如果不指定排序字段,默认使用相关度评分排序,评分度越高排名越靠前。
元数据
类似于mysql中的查询字段,*表示查询所有数据,相当于:
json
get user/_search
{
"query":{
"match_all":{}
}
}
禁用元数据
- 查询时候禁用元数据:
json
get user/_search
{
"_source":false,
"query":{
"match_all":{}
}
}
结果:hits中只包含id
json
{
"took": 12,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "user",
"_id": "1",
"_score": 1
}
]
}
}
- 使用Mapping禁用元数据:通过includes指定要查询的字段,excludes指定不查询的字段,excludes优先级高于includes,不推荐使用,因为mapping创建后不能修改。
json
put user2
{
"mappings": {
"_source": {
"includes": [
"name",
"age"
],
"excludes": [
"firends",
"owner"
]
}
}
}
put user2/_doc/1
{
"name":"admin",
"age":18,
"firends":[
"小明",
"小白",
"小吕"
],
"owner":{
"name":"desc"
}
}
get user2/_search
结果:
json
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "user2",
"_id": "1",
"_score": 1,
"_source": {
"name": "admin",
"age": 18
}
}
]
}
}
查询时候_source的使用
和Mysql中的select指定查询的字段作用一样
- 可使用通配符
json
get user/_search
{
"_source": "owner.*",
"query":{
"match_all": {}
}
}
结果:
json
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "user",
"_id": "1",
"_score": 1,
"_source": {
"owner": {
"name": "desc",
"other": "other"
}
}
}
]
}
}
- 使用includes和excludes
json
get user/_search
{
"_source":
{
"includes":
[
"name",
"owener.name"
],
"excludes":
[
"age"
]
},
"query":{
"match_all": {}
}
}
结果:
json
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "user",
"_id": "1",
"_score": 1,
"_source": {
"name": "admin"
}
}
]
}
}
- 禁用_source
json
get user/_search
{
"_source":false,
"query":{
"match_all":{}
}
}
query_string查询
- 查询所有
get /user/_search
- 带参查询
get /user/_search?p=name:admin
- 分页查询
get /user/_search?from=0&size=2&sort=age:asc
- 精准匹配
get /user/_search?q=date=2024-06-29
- _all查询,在所有的有索引的字段中匹配
get /user/_search?q=2024-06-29
注意:
- 第4种查询是精准匹配,只会匹配date字段
- 第5种查询是全文匹配,会匹配所有有索引的字段
- 如果执行 get /user/_searct?q=2024,则date类型的字段不会被检索,因为date类型只支持精准匹配