Elasticsearch支持很多查询方式,除了通过9300(默认)端口通过TCP协议进行查询,另一种就是DSL,它是把请求写在JSON里面,然后进行相关查询。
一个DSL例子
GET _search
{
"query": {
"bool": {
"must": [
{ "match": { "name": "Jim" }},
{ "match": { "city": "Guangzhou" }}
],
"filter": [
{ "term": { "weight": "60" }},
{ "range": { "age": { "gte": "18" }}}
]
}
}
}
查询的种类
Elasticsearch中的DSL主要由两部分组成:
Leaf query Cluase 叶查询子句:
这种查询可以单独使用,针对某一特定的字段查询特定的值,比如match、term、range等
Compound query Cluase复合查询子句:
这种查询配合其他的叶查询或者复合查询,用于在逻辑上,组成更为复杂的查询,比如bool
Query与Filter
查询在Query查询上下文和Filter过滤器上下文中,执行的操作是不一样的:
1、查询上下文:是在使用query进行查询时的执行环境,比如使用search的时候。
在查询上下文中,查询会回答这个问题——“这个文档是否匹配这个查询,它的相关度高么?”
ES中索引的数据都会存储一个_score分值,分值越高就代表越匹配。即使lucene使用倒排索引,对于某个搜索的分值计算还是需要一定的时间消耗。
2、过滤器上下文:在使用filter参数时候的执行环境,比如在bool查询中使用Must_not或者filter
在过滤器上下文中,查询会回答这个问题——“这个文档是否匹配?”
它不会去计算任何分值,也不会关心返回的排序问题,因此效率会高一点。
另外,经常使用过滤器,ES会自动的缓存过滤器的内容,这对于查询来说,会提高很多性能。
总而言之:
1 查询上下文:查询操作不仅仅会进行查询,还会计算分值,用于确定相关度;
2 过滤器上下文:查询操作仅判断是否满足查询条件,不会计算得分,查询的结果可以被缓存。
所以,根据实际的需求是否需要获取得分,考虑性能因素,选择不同的查询子句。
相关推荐
通用SQL到Elasticsearch DSL查询转换器。 专为设计 地位 实验性-加入我们,骇客入侵! 安装 npm install elasql 用法 const convert = require('elasql').convert convert('SELECT id,name FROM shop WHERE shop_id...
1. **节点(Node)**:Elasticsearch中的基本工作单元,每个节点存储和处理一部分数据。 2. **集群(Cluster)**:由一个或多个节点组成,共享相同的数据并共同参与集群的操作。 3. **索引(Index)**:类似于数据库中的表...
Elasticsearch Kibana 提供了多种搜索方式,包括 query string search、query DSL、query filter、full-text search、phrase search 和 highlight search 等。 ### 1. Query String Search Query String Search 是...
elasticsearch的使用 query DSL /Filter DSL 语句的对比
包es提供了Elasticsearch查询DSL。 关于 不建议使用Go“点导入”,但是,如果您想在这种情况下利用点导入的表现力,我建议将此逻辑抽象为更高级别的查询功能和程序包。 我不建议直接将其点导入其他包中。 例子 丽皮...
**Elasticsearch 查询 DSL 备忘单** Elasticsearch(ES)是一种强大的分布式搜索和分析引擎,广泛应用于日志分析、信息检索、实时数据分析等领域。它的查询DSL(Domain Specific Language)是用于构建复杂搜索和...
- **Query DSL**:Elasticsearch支持一种名为Query DSL的JSON风格查询语言。Java API中的`QueryBuilder`接口提供了一系列方法来构建这些查询。例如,我们可以使用`MatchQueryBuilder`进行全文本匹配,`...
同时,ElasticSearch提供了filter上下文和query上下文来分别优化查询结果的相关性和缓存能力。 4. **内部工作机制**:ElasticSearch的内部工作机制复杂而高效,包括文档是如何被索引和存储的,集群节点和分片如何...
### Elasticsearch数据库的下载、配置与使用案例 #### 一、Elasticsearch数据库的下载与安装 **1.1 下载与解压** - **下载Elasticsearch:** - **官方网站下载:** 访问Elasticsearch官方网站...
在本教程中,我们将深入探讨如何使用Leaflet.js库与Elasticsearch集成,实现多边形空间查询。Leaflet是一个轻量级的JavaScript库,专为Web地图开发设计,而Elasticsearch则是一个强大的分布式搜索和分析引擎,支持...
- **关键词搜索**:在Elasticsearch中,我们可以使用`match`或`query_string`查询来实现关键词搜索。例如,搜索关键词"example",可以写成`"match": { "field": "example" }`或者`"query_string": { "query": ...
Elasticsearch 7.6 中的查询DSL(Domain Specific Language)是一种强大的查询语言,允许用户构建复杂的查询逻辑。查询DSL由多种查询类型组成,每种查询类型都有其特定的用途和应用场景。 查询上下文和过滤器上下文...
Elasticsearch提供了多种查询语言,包括Query String Syntax、Query DSL、Filter DSL等,以满足不同场景下的搜索需求。 Elasticsearch聚合分析 Elasticsearch提供了多种聚合分析功能,包括 terms聚合、histogram...
在升级过程中,需要注意的是`elasticsearch-py`和`elasticsearch-dsl-py`的API与`elasticutils`有所不同,可能需要调整代码以适应新的接口。同时,由于`elasticsearch-dsl-py`的DSL特性,你可能需要重新设计查询逻辑...
**Java操作Elasticsearch**是将Java编程语言与流行的全文搜索引擎Elasticsearch相结合,用于高效地执行各种数据操作。Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎,能够处理大量的数据并提供实时...
本文将对Elasticsearch的安装过程进行总结,包括下载、安装插件、启动、接口测试、可视化页面的使用以及与其他搜索引擎和数据库的对比。 ### 一、下载Elasticsearch 首先,你需要从官方网站下载适合你操作系统的...
在本文中,我们将深入探讨如何在Laravel框架中使用Scout和Elasticsearch进行高效的全文搜索。Laravel Scout 是一个优雅的解决方案,它为Laravel应用程序提供了开箱即用的搜索功能,而Elasticsearch则是一个强大的...
- **文档(Document)**:在Elasticsearch中,文档是最小的数据单位,通常为JSON格式。 - **类型(Type)**:定义一组具有相同字段结构的文档集合。随着Elasticsearch的发展,类型的概念逐渐被弱化,新版中已被移除。 - ...
在IT行业中, Elasticsearch(ES)是一种广泛使用的分布式搜索引擎,它基于Lucene库,以其高效、可扩展和实时的搜索能力而闻名。在这个名为"Demo.zip_DEMO_YOG_查询es"的压缩包文件中,我们可以推测它包含了演示如何...