本文翻译自:www.elastic.co/guide/en/el…

本文是Elasticsearch的入门文档,将会介绍ElasticSearch中的查询操作和过滤操作。

执行查询

现在我们已经看到了一些基本的搜索参数,让我们再深入查询DSL。我们先来看看返回的文档字段。默认情况下,完整的JSON文档作为所有搜索的一部分返回。这被称为源(搜索匹配中的_source字段)。如果我们不希望整个源文档返回,我们有能力只需要返回源内的几个字段。

此示例显示如何从搜索中返回两个字段account_numberbalance(在_source之内):

GET /bank/_search
{"query": { "match_all": {} },"_source": ["account_number", "balance"]
}复制代码

请注意,上面的例子简单地减少了_source字段。它仍然会返回一个名为_source的字段,但在其中只包含字段account_numberbalance

如果你会一些SQL语句,则容易看出上述内容在概念上与SQL SELECT FROM字段列表有些相似。

现在我们来看看查询部分。以前,我们已经看过如何使用match_all查询来匹配所有文档。现在我们来介绍一个叫做匹配查询(match query)的新查询,这个查询可以被看作是基本的搜索查询(即针对特定字段或者字段集合进行的搜索)。

GET /bank/_search
{"query": { "match": { "account_number": 20 } }
}复制代码

此示例返回地址中包含术语“mill”的所有帐户:

GET /bank/_search
{"query": { "match": { "address": "mill" } }
}复制代码

此示例返回地址中包含术语“mill”或“lane”的所有帐户:

GET /bank/_search
{"query": { "match": { "address": "mill lane" } }
}复制代码

这个例子是matchmatch_phrase)的一个变体,返回在地址中包含短语“mill lane”的所有账号:

GET /bank/_search
{"query": { "match_phrase": { "address": "mill lane" } }
}复制代码

现在我们来介绍一下bool query。 bool查询允许我们使用布尔逻辑将更小的查询组合成更大的查询。

此示例组成两个match查询,并返回地址中包含“mill”和“lane”的所有帐户:

GET /bank/_search
{"query": {"bool": {"must": [{ "match": { "address": "mill" } },{ "match": { "address": "lane" } }]}}
}复制代码

在上面的例子中,bool must子句指定了一个文档被认为是匹配的所有查询。

相反,这个例子组成两个match查询,并返回地址中包含“mill”或“lane”的所有帐户:

GET /bank/_search
{"query": {"bool": {"should": [{ "match": { "address": "mill" } },{ "match": { "address": "lane" } }]}}
}复制代码

在上面的例子中,bool should子句指定了一个查询列表,其中任何一个查询都必须是true,才能被视为匹配的文档。

本示例组成两个match查询,并返回地址中既不包含“mill”也不包含“lane”的所有帐户:

GET /bank/_search
{"query": {"bool": {"must_not": [{ "match": { "address": "mill" } },{ "match": { "address": "lane" } }]}}
}复制代码

在上面的例子中,bool must_not子句指定了一个查询列表,其中任何一个查询都不能被匹配。

我们可以在一个bool查询中同时结合mustshouldmust_not子句。此外,我们可以在任何这些bool子句中编写bool查询来模拟任何复杂的多级布尔逻辑。

这个例子返回所有40岁但ID不为(aho)的人的账号:

GET /bank/_search
{"query": {"bool": {"must": [{ "match": { "age": "40" } }],"must_not": [{ "match": { "state": "ID" } }]}}
}复制代码

执行过滤

在上一节中,我们跳过了一个称为文档分数(搜索结果中的_score字段)的细节。分数是一个数字值,它是文档与我们指定的搜索查询匹配度的相对度量。分数越高,文档越相关,分数越低,文档就越不相关。

但查询并不总是需要产生分数,特别是当它们仅用于“过滤”文档集时。 Elasticsearch检测这些情况并自动优化查询执行,以便不计算无用分数。

我们在前一节介绍的bool查询也支持过滤子句,它允许使用查询来限制将被其他子句匹配的文档,而不改变计算得分的方式。作为一个例子,我们来介绍一下范围查询(range query),它允许我们通过一系列值来过滤文档。这通常用于数字或日期过滤。

本示例使用bool查询返回余额在20000和30000之间的所有帐户。换句话说,我们要查找大于或等于20000且小于等于30000的帐户。

GET /bank/_search
{"query": {"bool": {"must": { "match_all": {} },"filter": {"range": {"balance": {"gte": 20000,"lte": 30000}}}}}
}复制代码

解析上述内容,bool查询包含一个match_all查询(查询部分)和一个range查询(过滤器部分)。我们可以将其他查询替换为查询和过滤器部分。在上述情况下,范围查询是非常有意义的,因为落入该范围的文档全部匹配“相等”,即没有文档比另一个文档更加匹配。

除了match_allmatchboolrange查询之外,还有很多其他查询类型可用,我们不在这里介绍。由于我们已经对其工作原理有了一个基本的了解,所以将这些知识应用于其他查询类型的学习和实验并不难。

[翻译]ElasticSearch官方文档-执行查询和过滤操作相关推荐

  1. [翻译]ElasticSearch官方文档-安装

    本文翻译自:www.elastic.co/guide/en/el- 本文是Elasticsearch的入门文档,将会介绍ElasticSearch在不同环境下的安装. 安装 Elasticsearch ...

  2. 翻译Houdini官方文档:PDG教程之HDA处理器

    官方文档:PDG Tutorial 3 HDA Processor Part 1 关于这个教程 你将会学到什么 步骤 0 - 拷贝所需的HDA文件 步骤 1 - 观察HDA 步骤 2 - 设置PDG输 ...

  3. Elasticsearch官方文档

    官方文档地址 https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 1.0.0 设置Elasticsea ...

  4. 翻译HoudiniEngine官方文档:PDG

    官方文档:<Houdini Engine 3.6: PDG> 介绍 PDG 是一套用于对任务进行分配与管理的程序化架构. 使用 Houdini Engine,PDG的功能可以轻松地在其他应 ...

  5. 翻译Houdini官方文档:PDG/TOPs介绍

    官方文档:Introduction to TOPs 总览 使用TOPs工作 TOP节点UI Processors(处理器) Mappers partitions(分割) Schedulers(调度器) ...

  6. elasticsearch 官方文档一个小错误

    环境 elasticsearch:6.2.3 java:1.8 场景 最近又开始折腾elasticsearch了,参考官网文档这一段时: Configuring Elasticsearch ES_PA ...

  7. 翻译: Oralce官方文档-- Data Blocks, Extents, and Segments

    Data Blocks, Extents, and Segments                                                                   ...

  8. 【翻译一下官方文档】邂逅uniCloud云函数(基础篇)

    我将用图文的形式,把市面上优质的课程加以自己的理解,详细的把:创建一个uniCloud的应用,其中的每一步记录出来,方便大家写项目中,做到哪一步不会了,可以轻松翻看文章进行查阅.(此文长期更新连载) ...

  9. Maven介绍(翻译自官方文档)

    1. Introduction(简介) Maven, a Yiddish word meaning accumulator of knowledge, was originally started a ...

最新文章

  1. python爬虫requests实战_Python_爬虫_requests小实战
  2. Multimap的遍历和删除(很重要)
  3. 大学 University
  4. 租房还是买房结婚?大数据告诉你年轻人的真实想法
  5. iphone/ipad图标尺寸
  6. 怎么把mysql表里的时间往后推移_Mysql实战45讲笔记:2、更新语句的执行以及日志...
  7. 更新整理本人所有博文中提供的代码与工具(C++,2013.11)
  8. 4.3串的模式匹配算法(BF算法)
  9. datagridviewrow 行宽_C# Winform DataGridView实现行[Row]的上下移动…….. | 学步园
  10. vue移动端点击事件延迟_去除点击事件300ms延迟 (使用了vue之后)
  11. 2017 前端大事件和趋势回顾,2018 何去何从?
  12. Linux:rm命令的用法
  13. scrapy 命令行基本用法
  14. python常用小技巧_Python 实用技巧
  15. centos服务器安装python3,CentOS7 服务器上如何安装python3
  16. python的基础网络编程是下列_python基础 - 网络编程
  17. 声笔码6.00版使用指南
  18. 2018年10微型计算机接口技术,微机原理及接口技术
  19. 轻松搞懂Linux中程序、进程、服务的区别及操作命令
  20. 国内使用bing国际版(非国内国际切换版本)

热门文章

  1. 10 -3 2用c语言怎么打,(3*20+30-10)/2怎么使用C语言编写
  2. oracle not in 数组,慎用Oracle的not in (轉)
  3. java obj1 = obj2_无障碍assertEquals(Object obj1,Object obj2),想怎么比较就怎么比较!! [ 光影人像 东海陈光剑 的博客 ]...
  4. doc转docx文件会乱吗_利用python将doc文件转换为docx
  5. quartz启动 mysql报错_quartz启动报错,本地是好的,部署到服务器就不行了,大神求助~~...
  6. 用原生NodeJS实现简易的静态web
  7. 体重 年龄 性别 身高 预测鞋码_孩子身高低于同龄人就说明发育迟缓?这个简单公式可以算出来...
  8. html没有内容怎么爬,Url没有在网页中返回正确的html(对于我的Java爬虫)
  9. 2014计算机中山大学新华学院分数线,中山大学新华学院历年分数线 2021中山大学新华学院录取分数线...
  10. java过滤器对ext异步,拦截EXT请求的过滤器