ElasticSearch-查询字符串搜索

1.简易搜索

search API有两种表单:一种是“简易版”的查询字符串(query string)将所有参数通过查询字符串定义,另一种版本使用JSON完整的表示请求体(request body),这种富搜索语言叫做结构化查询语句(DSL)

查询字符串搜索对于在命令行下运行点对点(ad hoc)查询特别有用。例如这个语句查询所有类型为tweet并在tweet字段中包含elasticsearch字符的文档:

下一个语句查找name字段中包含"john"和tweet字段包含"mary"的结果。实际的查询只需要:

2._all字段

返回包含"mary"字符的所有文档的简单搜索:

在前一个例子中,我们搜索tweet或name字段中包含某个字符的结果。然而,这个语句返回的结果在三个不同的字段中包含"mary":

a.用户的名字是“Mary”

b.“Mary”发的六个推文

c.针对“@mary”的一个推文

Elasticsearch是如何设法找到三个不同字段的结果的?

当你索引一个文档,Elasticsearch把所有字符串字段值连接起来放在一个大字符串中,它被索引为一个特殊的字段_all。例如,当索引这个文档:

这好比我们增加了一个叫做_all的额外字段值:

若没有指定字段,查询字符串搜索(即q=xxx)使用_all字段搜索。

3.更复杂的语句

如:name字段包含"mary"或"john";date晚于2014-09-10;_all字段包含"aggregations"或"geo"。

编码后的查询字符串变得不太容易阅读:

简单(lite)查询字符串搜索惊人的强大。然而,简洁带来了隐晦和调试困难。而且它很脆弱——查询字符串中一个细小的语法错误,像-、:、/或"错位就会导致返回错误而不是结果。

最后,查询字符串搜索允许任意用户在索引中任何一个字段上运行潜在的慢查询语句,可能暴露私有信息甚至使你的集群瘫痪。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • [TOC] 一、空搜索 搜索(search) 可以做到: 在类似于 gender 或者 age 这样的字段 上使用...
    溯水心生阅读 1,523评论 0 0
  • 空搜索 搜索API的最基础的形式是没有指定任何查询的空搜索 ,它简单地返回集群中所有索引下的所有文档: 返回的结果...
    techhow阅读 262评论 0 0
  • 第3章 映射 映射是定义存储和索引的文档类型以及字段的过程。索引中的每一个文档都有一个类型,每种类型都有它自己的映...
    MR_ChanHwang阅读 2,326评论 0 1
  • 随着社会经济的发展,十个有为青年,九个都琢磨怎么创业。小到煎饼摊,大到互联网企业,各种项目层出不穷。就算今...
    王乐昌阅读 1,403评论 2 4
  • Saturday, 12/13/2014 07:48:13 PM 机房,没网 感觉这么多天来,自己都是无所事事的。...
    mr_f阅读 244评论 0 1