ElasticSearch学习笔记 | Match_ALL进阶检索
一、导入测试数据ElasticSearch官方为我们准备了一部分测试数据供调试使用,我们可以在安装完成Kinaba后进行数据导入处理1. 获取数据打开https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json复制全部数据(点击 Raw 按钮,新页面 Ctrl + A)2. 执行
一、导入测试数据
ElasticSearch官方为我们准备了一部分测试数据供调试使用,我们可以在安装完成Kinaba后进行数据导入处理
1. 获取数据
打开 https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json
复制全部数据(点击 Raw 按钮,新页面 Ctrl + A)
2. 执行批量添加
打开 Kibana :xxxx:5601/app/dev_tools#/console,第一行输入下面第一行,第二行开始粘贴测试数据,点击 ▶️ 运行
POST /bank/account/_bulk
{"index":{"_id":"1"}}
{"account_number":1,"balance":39225,"f....(测试数据)
二、ES支持两种基本方式检索
一个是通过使用 REST request URI发送搜索参数(uri+检索参数)
另一个是通过使用 REST request body来发送它们(uri请求体)
例子1:
GET bank/_search?q=*&sort=account_number:asc
返回结果:
结果并不会返回所有数据而是返回10条数据,类似于分页
{
"took" : 43,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1000,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "bank",
"_type" : "account",
"_id" : "0",
"_score" : null,
"_source" : {
"account_number" : 0,
"balance" : 16623,
"firstname" : "Bradshaw",
"lastname" : "Mckenzie",
"age" : 29,
"gender" : "F",
"address" : "244 Columbus Place",
"employer" : "Euron",
"email" : "bradshawmckenzie@euron.com",
"city" : "Hobucken",
"state" : "CO"
},
"sort" : [
0
]
},
...
例子2:
先按照account_number进行降序,如果相同按照balance进行降序
GET bank/_search
{
"query": {"match_all": {}},
"sort": [
{
"account_number": "desc"
},
{
"balance": "desc"
}
]
}
返回结果:
{
"took" : 12,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1000,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "bank",
"_type" : "account",
"_id" : "999",
"_score" : null,
"_source" : {
"account_number" : 999,
"balance" : 6087,
"firstname" : "Dorothy",
...
三、Query DSL
1. 基本语法格式
ElasticSearch提供了一个可以执行查询的son风的DSL(domain-specific language领域特定语言)。这个被称为 Query DSL。该查询语言非常全面,并且刚开始的时候感觉有点复杂,真正学好它的方法是从一些基础的示例开始的。
一个查询语句的典型结构:
{
QUERY_NAME:{
ARGUMENT:VALUE,
ARGUMENT:VALUE...
}
}
例如查询所有:
GET bank/_search
{
"query": {
"match_all": {}
}
}
如果是针对某个字段查询,查询结构:
{
QUERY_NAME:{
FIELD NAME:{
ARGUMENI:VALUE,
ARGUMENT:VALUE...
}
}
}
例如按照 balance 降序查询:
GET bank/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"balance": {
"order": "desc"
}
}
]
}
其实还有一种简单的表达形式,效果相同
"balance": {
"order": "desc"
}
可以简写为:
"balance": "desc"
- query定义如何查询
- match_all 查询类型【代表查询所有的所有】,es中可以在 query 中组合非常多的查询类型完成复杂查询
- 除了 query参数之外,我们也可以传递其它的参数以改变查询结果。如sort,size
- from + size限定,完成分页功能
- sort排序,多字段排序,会在前序字段相等时后续字内部排序,否则以前序为准
分页查询且只查询部分属性的例子:
GET bank/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"balance": {
"order": "desc"
}
}
],
"from": 0,
"size": 5,
"_source": ["balance", "account_number"]
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)