设为首页 收藏本站
查看: 767|回复: 0

[经验分享] ElasticSearch查询 第一篇:搜索API

[复制链接]

尚未签到

发表于 2017-7-1 06:55:18 | 显示全部楼层 |阅读模式
  《ElasticSearch查询》目录导航:


  • ElasticSearch查询 第一篇:搜索API
  • ElasticSearch查询 第二篇:文档更新
  • ElasticSearch查询 第三篇:词条查询
  • ElasticSearch查询 第四篇:匹配查询(Match)
  • ElasticSearch查询 第五篇:布尔查询
  不同于SQL语言,对ElasticSearch引擎发送的查询请求,有两种方式:第一种方式是使用RESTful 风格的API请求对数据进行搜索或更新,这意味着,必须使用搜索API向ElasticSearch引擎发起搜索请求;第二种方式是使用Qeury DSL,将查询语言封装成JSON结构,在JSON结构中,封装查询请求的参数,作为请求主体(Request Body),发送给ElasticSearch引擎处理。
  DSL是领域专用语言(Domain-SpecificLanguage)的首字母缩写,是一种通用的大数据查询语言,用于实现海量数据的检索分析。
  本系列是ElasticSearch的入门文章,用于介绍搜索API的使用方法,只求快速入门,想要深入了解,最好的文档永远是官方手册。
  一,约定格式
  在《ElasticSearch查询》系列文章中,为了简化描述,突出重点,约定将URL字符串中host:port/index/type 省略,



curl -XGET 'http://localhost:9200/twitter/tweet/_search?q=user:kimchy'
  简写为只包含“HTTP动词+端点+查询参数”的简写格式,如下:



GET /_search?q=user:kimchy
  将带有POST请求主体的查询,如下:



curl -XGET 'http://localhost:9200/twitter/tweet/_search' -d '{
"query" : {
"term" : { "user" : "kimchy" }
}
}'
  简写为只包含“HTTP动词+端点+请求主体JSON”的格式,如下:



GET /_search -d
{
"query" : {
"term" : { "user" : "kimchy" }
}
}
  二,查询端点(Endpoint)
  查询端点允许RESTful API或客户端查询ElasticSearch引擎中存储的数据,通过HTTP动词定义操作,通过URI定位数据资源。
  1,用于搜索数据的端点
  查询ElasticSearch引擎,主要使用_search 和_query端点,_search端点允许执行搜索查询,返回查询结果。在_search端点上,能够执行RESTful API查询和Qeury DSL查询,例如一下脚本:



GET /_search?q=user:kimchy
GET /_search -d
{
"query" : {
"term" : { "user" : "kimchy" }
}
}
  ElasticSearch的所有查询请求都发送到_search端点,对于_query端点,只用于将查询的结果删除:



DELETE /_query?q=user:kimchy

  2,分析端点(_analyze)
  分析端点_analyze,用于对查询参数进行分析,并返回分析的结果



POST /_analyze?field=title -d
ElasticSearch Sever

  3,计数端点(_count)
  在计数端点_count上,执行查询,获取满足查询条件的文档数量



GET /_count?q=user:jim
  4,解释端点(_explain)
  用于验证指定的文档是否满足查询条件,格式是index/type/_id/_explain,例如



GET index/type/1/_explain?q=message:search
  三,根据文档标识ID搜索单个文档
  根据文档标识符搜索文档时,使用“index/type/_id” 格式,如下,搜索文档标识为13的文档:



GET /13

  四,检查是否有文档满足查询条件



GET /_search/exists?q=user:kimchy
  五,URI搜索
  请求参数位于_search端点之后,参数之间使用&分割,例如:



GET /_search?pretty&q=title:azure&explain=true&from=1&size=10&sort=title:asc&fields:user,title,content

  1,pretty参数
  默认情况下,API返回的JSON对象忽略换行符,在请求(Request)中加上pretty参数,强制ElasticSearch引擎在响应(Response)中加上换行符,使返回的结果集JSON可读。
  2,查询条件(q)参数
  查询条件(q)参数用于指定返回的文档必须匹配的查询条件,例如:q=title:azure,指定搜索title字段中包含azure关键字的文档;
  可以设置一个字段包含多个关键字,关键字之间使用空格或逗号分隔,例如:q=title:(azure,aws,cloud),或 q=title:(azure aws cloud),指定搜索title字段中包含azure,aws或cloud的文档;只要title字段包含任意一个关键字,文档就满足查询条件;
  q参数可以指定搜素一个短语,短语使用双引号标识,例如:q=title:"azure vs aws",指定搜索title中包含短语“azure vs aws”的文档;
  在查询条件中,也可以指定操作符:+或-,操作符 + 用于指定返回的文档必须匹配查询条件;操作符 - 用于指定返回的文档不匹配查询条件;操作符之间以空格分隔,操作符是位于查询条件=号右侧,字段前面,例如 q=+title:azure -title:aws,指定搜索字段title中只能包含azure,不能包含aws;
  3,默认操作符(default_operator)参数
  在API中可以包含多个查询条件q,默认条件下,多个查询条件之间的关系是或(or)关系,例如:q=title:azure&q=content:azure,指定搜索title字段中包含azure关键字,或者content字段中包含azure关键字的文档。
  查询条件之间的逻辑关系由默认操作符(default_operator)参数指定,默认值是or,该属性可以设置为and 或 or;


  • 当设置为or时,只要一个查询条件(q)满足,就返回文档;例如:q=title:azure&q=content:azure&default_operator=or
  • 当设置为and时,所有的查询条件都满足时,才返回文档;例如:q=title:azure&q=content:azure&default_operator=and
  对于查询:q=title:(azure,aws)&q=content:(azure,aws),表示搜索文档的字段title或content,只要字段值中出现azure 或 aws关键字,就表示该文档匹配查询条件,作为查询结果返回。
  4,投影字段(fields)参数
  默认情况下,返回的每个文档都包括_index,_type,_id,_score和_source字段,投影参数 fields 用于指定返回的字段列表。在查询时,通过fields参数,指定一个以逗号分隔的字段列表,这些字段的store属性必须设置为true,或存在于_source字段中。默认情况下,fields字段的参数值是_source。可以指定一个或多个字段,字段之间以逗号分隔:


  • fields=title
  • fields=title,user
  5,排序(sort)参数
  排序(sort)参数,用于对结果进行排序,使ElasticSearch按照指定的字段对结果进行排序,值是fieldName:asc/fieldName:desc,默认是升序排序,可以有多个排序字段,排序字段之间以逗号分割,例如:sort=field1:asc,field:desc
  6,其他参数


  • 解释(explain)参数:设置为true时,ElasticSearch将在结果中的文档中包含额外的解释信息;
  • 分页(from和size)参数,用于指定结果窗口,from参数指定结果从哪个记录开始返回,默认值是0;size参数定义了返回结果的最大文档数量,默认值是10,参数示例:from=10&size=15
  • 小写词条(lowercase_expanded_terms)参数:自动将词条转换成小写,默认值是true;
  • 分析通配符(analyze_wildcard)参数:通配符或前缀是否被分析,默认值是false;
  六,查询请求
  搜索API可以转换为查询请求,如下代码,查询请求的查询条件是词条查询,查询参合URI搜索的参数是对应的:



GET /_search -d
{  
"from":0,
"size":10,
"sort":[  
{"post_date":{"order":"asc"}},
{ "name":"desc" }
],
"fields":[ "name","postDate","age"],
"query":{  
"term":{ "user":"kimchy"}
}
}
  1,查询条件
  在查询条件结点"query"中,指定查询的类型是词条(Term),在词条中指定查询的条件,例如,只要User中包含kimchy关键字,就满足查询条件:



"query" : {
"term" : { "user" : "kimchy" }
}
  2,排序
  排序sort字段指定排序的字段及其排序的方向,并且排序值(Sort Value)作为查询结果返回:



"sort":[  
{   "post_date":{   "order":"asc" }},
{   "name":"desc"  }
]
  排序的方向:升序asc,降序desc,对于_score字段,默认的排序方式是降序desc,对于其他字段,默认的排序方向是asc。
  当对字符串字段进行排序时,该字段最好不被分词(analyzed或tokenized),如果字符串字段被分析,那么ElasticSearch引擎将随机选取字段的一个分词(Term)进行排序,这可能不是你想要的排序值。
  3,投影,选取返回的字段
  投影字段(fields),用来限制返回的字段,该字段必须存储在倒排索引中,也就是说,在索引映射中,该字段的store属性为ture。推荐使用_source字段,从文档源数据中,指定需要返回的字段。示例,使用_source 字段,控制结果hits数组中,每个文档_source字段必须返回的字段:



{
"_source": {
"include": [ "filed1", "field2" ],
"exclude": [ "field3" ]
},
"query" : {
"term" : { "user" : "kimchy" }
}
}
  4,窗口字段
  窗口字段 from 和 size,用来限制返回的文档数量
  参考文档:
  Elasticsearch Reference [2.4] » Search APIs
  Elasticsearch Reference [2.4] » Document APIs
  Elasticsearch Reference [2.4] » Search APIs » URI Search

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389877-1-1.html 上篇帖子: 初码-Azure系列-如何在控制面板中选择中文版操作系统 下篇帖子: 已有海外版Office365,如何开通相同Tenant的Azure
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表