前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >6.Elasticsearch轻量搜索

6.Elasticsearch轻量搜索

作者头像
IT云清
发布2019-01-22 11:13:39
1.1K0
发布2019-01-22 11:13:39
举报
文章被收录于专栏:IT云清

轻量搜索

有两种形式的 搜索 API:

  • 一种是 “轻量的” 查询字符串 版本,要求在查询字符串中传递所有的参数
  • 另一种是更完整的请求体版本,要求使用 JSON 格式和更丰富的查询表达式作为搜索语言。

本文主要讲解这种轻量的搜索。

查询字符串搜索非常适用于通过命令行做即席查询。例如,查询在 tweet 类型中 tweet 字段包含 elasticsearch 单词的所有文档:

代码语言:javascript
复制
GET /_all/tweet/_search?q=tweet:elasticsearch

下一个查询在 name 字段中包含 john 并且在 tweet 字段中包含 mary 的文档。实际的查询就是这样

代码语言:javascript
复制
+name:john +tweet:mary

但是查询字符串参数所需要的URL编码实际上更加难懂:

(开发者应该很容易理解,+,:等符号,在浏览器地址栏输入后,一回车,自动会被编码为这种字符)

代码语言:javascript
复制
GET /_search?q=%2Bname%3Ajohn+%2Btweet%3Amary
  • 前缀表示必须与查询条件匹配。类似地, - 前缀表示一定不与查询条件匹配。没有 + 或者 - 的所有其他条件都是可选的——匹配的越多,文档就越相关。

注意上面的查询方式,返回结果,会按照匹配从高到低排序,当参数值中含有中文时,部分版本可能会报错。

_all 字段

这个简单搜索返回包含 mary 的所有文档:

代码语言:javascript
复制
GET /_search?q=mary

如果有多个地方含有mary,比如:

  • 有一个用户叫做 Mary
  • 6条微博发自 Mary
  • 一条微博直接 @mary
Elasticsearch 是如何在三个不同的字段中查找到结果的呢?

当索引一个文档的时候,Elasticsearch 取出所有字段的值拼接成一个大的字符串,作为 _all 字段进行索引。例如,当索引这个文档时:

代码语言:javascript
复制
{
    "tweet":    "However did I manage before Elasticsearch?",
    "date":     "2014-09-14",
    "name":     "Mary Jones",
    "user_id":  1
}

这就好似增加了一个名叫 _all 的额外字段:

代码语言:javascript
复制
"However did I manage before Elasticsearch? 2014-09-14 Mary Jones 1"

除非设置特定字段,否则查询字符串就使用 _all 字段进行搜索。

更复杂的查询编辑

下面的查询针对tweents类型,并使用以下的条件:

  • name 字段中包含 mary 或者 john
  • date 值大于 2014-09-10
  • all 字段包含 aggregations 或者 geo
代码语言:javascript
复制
+name:(mary john) +date:>2014-09-10 +(aggregations geo)

查询字符串在做了适当的编码后,可读性很差:

代码语言:javascript
复制
?q=%2Bname%3A(mary+john)+%2Bdate%3A%3E2014-09-10+%2B(aggregations+geo)

这种轻量级查询还是很高效的,但是容易出现语法错误,在实际生产中,还是推荐请求体查询。

下一篇:7.Elasticsearch请求体查询
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年05月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 轻量搜索
  • _all 字段
    • Elasticsearch 是如何在三个不同的字段中查找到结果的呢?
    • 更复杂的查询编辑
      • 下一篇:7.Elasticsearch请求体查询
      相关产品与服务
      Elasticsearch Service
      腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档