ElasticSearch查询 第一篇:搜索API

ElasticSearch查询 第一篇:搜索API

ElasticSearch查询 第二篇:文档更新

ElasticSearch查询 第三篇:词条查询

ElasticSearch查询 第四篇:匹配查询(Match)

ElasticSearch查询 第五篇:布尔查询

不同于SQL语言,对ElasticSearch引擎发送的查询请求,有两种方式:第一种方式是使用RESTful 风格的API请求对数据进行搜索或更新,这意味着,必须使用搜索API向ElasticSearch引擎发起搜索请求;第二种方式是使用Qeury DSL,将查询语言封装成JSON结构,在JSON结构中,封装查询请求的参数,作为请求主体(Request Body),发送给ElasticSearch引擎处理。

DSL是领域专用语言(Domain-Specific Language)的首字母缩写,是一种通用的大数据查询语言,用于实现海量数据的检索分析。

本系列是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 -dElasticSearch 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,用来限制返回的文档数量

来源:http://www.cnblogs.com/ljhdo/p/4486978.html

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

推荐阅读更多精彩内容

  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查询集API 参...
    阳光小镇少爷阅读 3,809评论 0 8
  • 博客原文一博客原文二 翻译作品,水平有限,如有错误,烦请留言指正。原文请见 官网英文文档 起步 Elasticse...
    rabbitGYK阅读 3,227评论 0 68
  • 第3章 映射 映射是定义存储和索引的文档类型以及字段的过程。索引中的每一个文档都有一个类型,每种类型都有它自己的映...
    MR_ChanHwang阅读 2,295评论 0 1
  • 进程与线程 进程(process)是指在系统中正在运行的一个应用程序,是系统资源分配的基本单位,在内存 中有其完备...
    关耳木水阅读 422评论 0 0
  • 好像一只张牙舞爪的螃蟹虚张声势的掩饰。也像一首慷慨激昂的后摇,振奋人心的节奏里却挂不住眼泪。 我背着厚厚的盔甲,对...
    HahaPbbt阅读 291评论 0 2