6.Elasticsearch轻量搜索

本文介绍了Elasticsearch中轻量搜索API的使用方法,包括如何通过命令行进行即时查询、查询字符串的编码方式及注意事项。此外,还详细解释了_all字段的作用及更复杂的查询编辑技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

轻量搜索

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

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

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

GET /_all/tweet/_search?q=tweet:elasticsearch

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

+name:john +tweet:mary

但是查询字符串参数所需要的URL编码实际上更加难懂:
(开发者应该很容易理解,+,:等符号,在浏览器地址栏输入后,一回车,自动会被编码为这种字符)

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

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

_all 字段

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

GET /_search?q=mary

如果有多个地方含有mary,比如:
- 有一个用户叫做 Mary
- 6条微博发自 Mary
- 一条微博直接 @mary

Elasticsearch 是如何在三个不同的字段中查找到结果的呢?

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

{
    "tweet":    "However did I manage before Elasticsearch?",
    "date":     "2014-09-14",
    "name":     "Mary Jones",
    "user_id":  1
}

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

"However did I manage before Elasticsearch? 2014-09-14 Mary Jones 1"

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

更复杂的查询编辑

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

  • name 字段中包含 mary 或者 john
  • date 值大于 2014-09-10
  • all 字段包含 aggregations 或者 geo
+name:(mary john) +date:>2014-09-10 +(aggregations geo)

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

?q=%2Bname%3A(mary+john)+%2Bdate%3A%3E2014-09-10+%2B(aggregations+geo)

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

下一篇:7.Elasticsearch请求体查询
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值