自学内容网 自学内容网

关于ES的查询

查询结果那么多字段都是什么?

为什么会提到这个问题呢,因为默认ES查询的结果会有很多信息,我们可能并不希望要那么多数据,所以你需要了解这些字段都表示什么,并正确的返回和使用它们。

took– Elasticsearch 运行查询所用的时间(以毫秒为单位)
timed_out– 搜索请求是否超时
_shards– 搜索了多少个分片以及分片数量的细分 成功、失败或被跳过。
max_score– 找到的最相关文件的分数
hits.total.value- 找到的匹配文档数量
hits.sort- 文档的排序位置(不按 Relevance Score 排序时)
hits._score- 文档的相关性分数(在使用match_all)

每个搜索请求都是独立的:Elasticsearch 不维护任何 state 信息。要分页浏览搜索结果,请指定 请求中的 and 参数。from size

常见搜索查询示例及解释

注意:我这里先说明一下,下面遇到了可再体会,mappings指定了字段格式,所以查询时与mappings也是有关系的,不同的字段类型查询的语法可能会不同。

从全部数据中排序分页

GET /myes_client_test/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "id": "asc" }
  ],
  "from": 10,
  "size": 10
}

GET /这里是我的索引/_search  (本文中只解释这一次哦);
query 表示查询,match_all:{} 表示查询所有(固定格式);
sort 表示结果要按什么规则排序,id是你数据中的字段,支持asc/desc升序/降序;
from 表示跳过多少条开始取值,类似mysql的offset;
size 表示结果要返回多少条数据,类似mysql的limit;
通过上面解释了解哪些是关键字,哪些是自己数据中的字段了吧?需要多加练习

查询数字字段的最大值/最小值

POST /myes_client_test/_search?size=0
{
  "aggs": {
    "max_id": { "max": { "field": "id" } }
  }
}
aggs 表示使用ES聚合模式查询;
max_id 是自定义的,类似SQL中AS的作用‘select max(id) as max_id’为取值时起个好听的名字;
max 是关键字最大值;
field 是关键字,指定按数据中id字段筛选取最大值;
⚠️ size=0 也很重要,因为ES默认会返回10条文档数据,指定size=0表示我们只需要聚合的结果就好了,不需要文档数据。

min 是最小值关键字,知道该怎么用了吧?

字符串查询条件

# 例如按姓名查询,在SQL中最常用到条件
name = '张三'(可以利用到索引,性能较好)
name like '张三%'(可以利用到索引,性能较好)
name like '%张三'(不能利用到索引,性能差)
name like '%张三%'(不能利用到索引,性能差)
# 那么上面几种情况在ES如何实现呢?
1.精准查询
POST /_sql?format=txt
{
  "query": "SELECT * FROM myes_client_test WHERE name = '张玉霞'"
}

同
POST /myes_client_test/_search
{
  "size" : 1,
  "query" : {
    "term" : {
      "name.keyword" : {
        "value" : "张玉霞"
      }
    }
  },
  "_source" : true
}
上面 _source 表示是否返回 _source 字段(这里面是完整的数据),不指定"_source"默认为true;
term 表示精准匹配;
曾使用下面方式进行查询,但没有查询出来,那么有什么区别呢?:
{
  "size": 1, 
  "query": {"term": { "name" : "张玉霞" }}
}
这里就要回看mappings了,我在插入数据时并没有去指定mappings,回看索引设置,发现name字段默认是keyword;将字段设置为keyword类型可以使用term加字段.keyword来精确匹配查询。
2.模糊查询 (like)
POST /myes_client_test/_search
{
  "size" : 10,
  "query" : {
    "wildcard" : {
      "name.keyword" : {
        "wildcard" : "张玉*"
      }
    }
  }
}
模糊查询时 size 字段是有效的,如果上面匹配的结果数>10 那么最多返回10条。
wildcard 表示通配符查询,*同SQL中%的效果。

原文地址:https://blog.csdn.net/u012579604/article/details/143873351

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!