测试es的dsl查询,准备数据,在插入数据的时候,如果index、type、mapping都没有,es会自动创建
一、数据的准备
curl -XPOST "http://192.168.99.1:9200/new_index/product/p1" -d' { "name":"new Mac Book" }' curl -XPOST "http://192.168.99.1:9200/new_index/product/p2" -d' { "name":"note book", "price":12345, "cats":["notes"] }' curl -XPOST "http://192.168.99.1:9200/new_index/product/p3" -d' { "name":"apples", "price":4, "cats":["fruit"] }' curl -XPOST "http://192.168.99.1:9200/new_index/product/p4" -d' { "name":"pen", "price":50 }' curl -XPOST "http://192.168.99.1:9200/new_index/product/p5?routing=p5" -d' { "name":"add document use routing" }' curl -XPOST "http://192.168.99.1:9200/new_index/product/p6" -d' { "name":"I love apples too.", "price":60 }'
二、修改name字段的mapping
注意:1、mapping是要在创建索引的时候创建好,已经创建好的field的mapping不可再次修改,但是可以新增field的mapping
2、在es5中,需要设置text类型字段的fielddata=true,不然下方的查询会报错
curl -XPOST "http://192.168.99.1:9200/new_index/_mapping/product" -d' { "properties": { "name":{ "type": "text", "fielddata": true } } }'
三、查询出price在1-200之间,且name属性中必须不包含pen,按照price降序,name升序,对返回的结果进行分页,_source中的数据进行过滤,返回name字段分词后的term数据
注意:已经分词过的字段不建议排序,耗性能,而且排序也不一定能得到想要的结果
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d' { "explain": true, "from": 0, "size": 20, "fielddata_fields" : ["name"], "_source": { "include": ["name*","price"], "exclude": ["name"] }, "version": true, "query": { "bool": { "must": [ { "range": { "price": { "gte": 1, "lte": 200 } } } ], "must_not": [ { "term": { "name": { "value": "pen" } } } ] } }, "sort": [ { "price": "desc" }, { "name" : { "order": "asc" } } ] }'
四、统计price在1-200之间,且name属性中必须不包含pen的数据的数量
curl -XGET "http://192.168.99.1:9200/new_index/product/_count" -d' { "query": { "bool": { "must": [ { "range": { "price": { "gte": 1, "lte": 200 } } } ], "must_not": [ { "term": { "name": { "value": "pen" } } } ] } } }'
五、查询price在1-200之间,且name属性中必须不包含pen的数据是否存在
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d' { "size":0, "terminate_after":1, "query": { "bool": { "must": [ { "range": { "price": { "gte": 1, "lte": 200 } } } ], "must_not": [ { "term": { "name": { "value": "pen" } } } ] } } }'
六、查询id为p1,p3,p4的数据
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d' { "query": { "ids": { "values": ["p1","p2","p3"] } } }'如果上方的查询url中没有指定type,那么也是可以在ids下方指定type的
七、查询文档中一定包含price字段的文档
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d' { "query": { "exists" : { "field" : "price" } } }'
八、通配符查询,查询name字段是bo*k这种格式的
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d' { "query": { "wildcard": { "name": { "value": "bo*k" } } } }'
九、query和filter一起结合使用
需求:过滤出price在1-200之间,name中包含apples
注意:1、query查询需要考虑到文档的相关性评分,而filter不需要。
2、filter查询的结果会缓存,速度比query要快
3、一般需要做全文检索的字段或需要考虑到相关度评分的字段使用query查询,其余的可以考虑使用filter过滤。
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d' { "query": { "bool": { "filter": { "range": { "price": { "gte": 1, "lte": 200 } } }, "must": [ { "term": { "name": { "value": "apples" } } } ] } } }'
十、match匹配查询
operator:
and : 表示query中的数据分词后的都需要匹配上。
or : 表示query中的数据分词后任意一个匹配上即可。(默认)
minimum_should_match : 里面的值写百分比,即query中的词分词后,满足minimum_should_match这个里面的百分比即可。默认最少需要匹配一个。(如果query中的词可以分成3个term,配置的百分比为80%,那么3*0.8最终需要匹配2个)
十一、multi_match查询,从多个字段中查询
注意:fields中写的是多个字段
type 的值有多个,不同的值会影响文档的得分
curl -XGET "http://192.168.99.1:9200/new_index/product/_search" -d' { "query": { "multi_match": { "query": "apples", "fields": ["name","descs"], "type": "best_fields" } } }'
相关推荐
通用SQL到Elasticsearch DSL查询转换器。 专为设计 地位 实验性-加入我们,骇客入侵! 安装 npm install elasql 用法 const convert = require('elasql').convert convert('SELECT id,name FROM shop WHERE shop_id...
通过这种方式,我们可以将Mybatis的Mapper机制与Elasticsearch的DSL查询紧密结合,同时避免了AOP带来的复杂性。这种方式不仅提高了代码的整洁度,还使得Elasticsearch的查询逻辑更加清晰。在实际项目中,这样的整合...
在这篇资源中,我们将详细介绍如何使用DSL...最后,我们将分享一些实用技巧和最佳实践,帮助您充分发挥DSL在Elasticsearch中的优势。我们将探讨性能优化、查询调试和索引优化等关键主题,以提升查询效率和搜索准确性。
使用Vue.js搭建的ElasticSearch搜索引擎的前端 Build Setup # install dependencies npm install # serve with hot reload at localhost:8080 npm run dev # build for production with minification npm run ...
基于 Splunk 的 SPL 查询语言转换成 ElasticSearch 的 DSL。 转换结果和 对齐。 可以配置 进行表达式搜索。 Usage const converter = require("./lib/converter") try { const { target, dev } = converter.parse(`...
Django Elasticsearch DSL是Django与Elasticsearch之间的一个桥接库,它允许开发者使用DSL来定义Elasticsearch的索引和搜索查询。DSL是一种简洁、直观的语法,使得编写复杂的Elasticsearch查询变得容易。通过这个库...
Elasticsearch-DSL库提供了一种更加Pythonic的方式来操作Elasticsearch,它使得开发者可以使用更加结构化和可读性强的代码来执行复杂的查询和操作。该库的核心功能包括: 1. **查询构造**:通过构建类对象的方式,...
标题中的“一款基于SQL查询ES的Java工具包”指的是一个Java库,专门设计用于通过SQL语句查询Elasticsearch(ES)数据存储。Elasticsearch是一个流行的开源搜索引擎和分析引擎,广泛应用于日志分析、实时分析等领域。...
**Django Elasticsearch DSL**:这个库提供了Django和Elasticsearch之间的桥梁,它简化了在Django项目中集成Elasticsearch的过程,通过DSL(领域特定语言)使得编写索引、查询和映射变得更加直观和便捷。 **Django ...
Django Elasticsearch DSL Django Elasticsearch DSL是一个软件包,它允许在Elasticsearch中索引Django模型。 它是作为的薄包装而构建的,因此您可以使用elasticsearch-dsl-py团队开发的所有功能。 您可以在查看完整...
ElasticSQL package converts SQL to ElasticSearch DSL SQL Features Support: SQL Select SQL Where SQL Order By SQL Group By SQL AND & OR SQL Like & NOT Like SQL COUNT distinct count(distinct(mid)...
本项目为基于Java语言的专利检索式转换Elasticsearch DSL实现设计源码,包含40个文件,其中32个为Java源文件,2个XML文件,2个其他语言文件。主要功能是将企业使用的检索式转换为Elasticsearch的查询语言,以提高...
在IT行业中,尤其是在大数据处理和搜索引擎领域,Elasticsearch(简称ES)是一个极其重要的工具。它是一个基于Lucene的开源全文搜索引擎,具有分布式、实时、高可扩展性以及灵活的数据模型等特点。PHP作为广泛使用的...
弹性搜索 建造状态 6.0.0 6.0.1 6.1.0 6.1.1 6.1.2 6.1.3 6.1.4 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.3.0 6.3.1 6.3.2...用antlr4重写elasticsearch ,支持 变更日志 Maven < groupId>io.github.iamazy.elasticsearch.ds
资源分类:Python库 所属语言:Python 资源全名:django-elasticsearch-dsl-drf-0.1.6.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Elasticsearch 查询语言 ES|QL 是对传统 Query DSL 的扩展和改进,旨在提供一个统一的查询体验,涵盖搜索、规则设定、警报等多种功能。经过大约 17 个月的开发,ES|QL 已经成为一个功能强大的工具,可以帮助用户更...
Elasticsearch 7.6 中的查询DSL(Domain Specific Language)是一种强大的查询语言,允许用户构建复杂的查询逻辑。查询DSL由多种查询类型组成,每种查询类型都有其特定的用途和应用场景。 查询上下文和过滤器上下文...
该工具将sql转换为elasticsearch dsl 目前支持: sql和表达式 sql或表达式 等于(=)支持 不等于(!=)支持 gt(>)支持 gte(> =)支持 lt(<)支持 lte(<=)支持 sql in(例如(1,2,3)中的id...
`elasticsearch-dsl-py`的主要优势在于其提供的DSL查询语法,允许开发者以更自然的方式编写复杂的搜索查询。例如,我们可以创建一个简单的匹配查询: ```python from elasticsearch_dsl import Search, Q s = ...