es实战之查询_search 初探

附:<a href="//www.greatytc.com/p/90eea1312a4f"> es安装 </a>

1、导入测试数据

首先下载<a href="https://github.com/bly2k/files/blob/master/accounts.zip?raw=true"> 下载测试数据 accounts.json </a>

<strong>step1、使用ip:port/索引名称/类型/_bulk --data-binary @文件名 语法导入文档</strong>
<pre>curl -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary "@accounts.json"</pre>

<strong>step2、使用_cat/indices?v 语法,可以看到索引bank中已经有了1000条docs</strong>

<pre>curl 'localhost:9200/_cat/indices?v'
<i>health index pri rep docs.count docs.deleted store.size pri.store.size
yellow bank 5 1 1000 0 424.4kb 424.4kb</i></pre>

2、查询语法 "_search"

_search的用法:<code>ip:port/索引名称/_search?q={语法}</code>
例如:
<strong>ex1:查询bank下的所有文档(pretty表示对结果格式化后输出)</strong>
<pre>curl 'localhost:9200/bank/_search?q=*&pretty'</pre>

<strong>查询结果解读</strong>
<pre>
{
"took" : 63,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1000,
"max_score" : 1.0,
"hits" : [ {
"_index" : "bank", "_type" : "account", "_id" : "1", "_score" : 1.0, "_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
}]
}
}
</pre>

  • took 执行查询所需要的时间,单位毫秒
  • timed_out 查询是否超时
  • _shards 执行查询时搜索了多少分配
  • hits 查询结果
  • hits>total 返回的结果数
  • hits>hits 返回的json数组,默认返回10条记录

3、查询的json语法实例

<strong>ex2:match_all 查询bank下的所有文档2</strong>
<pre>curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "query": { "match_all": {} }}'</pre>
<strong>ex3:size 指定返回的结果条数</strong>
<pre>
curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "query": { "match_all": {} }, "size": 1}'
</pre>
<strong>ex4:from 从第几条开始查</strong>
<pre>
curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "query": { "match_all": {} }, "from": 10, "size": 10}'
</pre>
<strong>ex5:sort 根据字段排序</strong>
<pre>
curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "query": { "match_all": {} },
"sort": { "balance": { "order": "desc" } }}'
</pre>

<strong>ex6:显示特定的字段 "_source>account_number"</strong>
<pre>
curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{
"query": { "match_all": {} },
"_source": ["account_number", "balance"]}'
</pre>
ex7:query>match 等于20
<pre>curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "query": { "match": { "account_number": 20 } }}'</pre>

ex8:query>match 字段中包含单词
curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "query": { "match": { "address": "mill" } }}'
ex9:query>match 字段中包含单词a或者单词b
<pre>curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "query": { "match": { "address": "mill lane" } }}'</pre>
ex10:query>match_phrase 字段中包含单词a和单词b
<pre>curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "query": { "match_phrase": { "address": "mill lane" } }}'</pre>

4、布尔查询

and "must"(且)

<pre>curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "query": { "bool": { "must": [ { "match": { "address": "mill" } },
{ "match": { "address": "lane" } } ] } }}'</pre>

or "should"(或)

<pre>
curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "query": { "bool": { "should": [ { "match": { "address": "mill" } },
{ "match": { "address": "lane" } } ] } }}'
</pre>

!"must_not"(非)

<pre>
curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "query": { "bool": { "must_not": [ { "match": { "address": "mill" } }, { "match": { "address": "lane" } } ] } }}'
</pre>

must_not match

<pre>
curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "query": {
"bool": { "must": [ { "match": { "age": "40" } } ],
"must_not": [ { "match": { "state": "ID" } } ] } }}'
</pre>

bool查询的过滤语法"filter"

查询int类型值的区间结果 my_min<value<my_max
<pre>
curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{
"query": { "bool": { "must": { "match_all": {} },
"filter": { "range": { "balance": { "gte": 20000, "lte": 30000 }
} } } }}'
</pre>

5、分组查询

按state分组
<pre>
curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "size": 0,
"aggs": { "group_by_state": { "terms": { "field": "state" } } }}'
</pre>
按state分组,然后求每个分组结果的平均值
<pre>curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "size": 0,
"aggs": { "group_by_state": { "terms": { "field": "state" },
"aggs": { "average_balance": { "avg": { "field": "balance" }
} } } }}'
</pre>
按state分组,然后求每个分组结果的平均值,并按平局值排序
<pre>curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "size": 0,
"aggs": { "group_by_state": { "terms": { "field": "state", "order": { "average_balance": "desc" } },
"aggs": { "average_balance": { "avg": { "field": "balance" }
} } } }}'</pre>

按指定的范围进行分组
<pre>
curl -XPOST 'localhost:9200/bank/_search?pretty' -d
'{ "size": 0, "aggs": { "group_by_age": {
"range": { "field": "age", "ranges": [
{ "from": 20, "to": 30 },
{ "from": 30, "to": 40 },
{ "from": 40, "to": 50 } ] },
"aggs": { "group_by_gender": { "terms": { "field": "gender" },
"aggs": { "average_balance": { "avg": { "field": "balance" }
} } } } } }}'

</pre>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 介绍 elasticsearch是一个高效的、可扩展的全文搜索引擎 基本概念 Near Realtime(NRT)...
    imsilence阅读 777评论 0 0
  • 以下命令均是在kibana的“Dev Tools”里面输入的 数据准备:先存入3条数据 es的搜索方式细分为6种 ...
    缓慢移动的蜗牛阅读 6,925评论 0 2
  • 博客原文一博客原文二 翻译作品,水平有限,如有错误,烦请留言指正。原文请见 官网英文文档 起步 Elasticse...
    rabbitGYK阅读 3,248评论 0 68
  • es种有两种查询模式,一种是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query strin...
    会武功的蚊子阅读 542评论 1 3
  • 加载样本数据 curl -u elastic:changeme -XPOST 'localhost:9200/ba...
    席梦思阅读 494评论 0 1