测试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...
在这篇资源中,我们将详细介绍如何使用DSL...最后,我们将分享一些实用技巧和最佳实践,帮助您充分发挥DSL在Elasticsearch中的优势。我们将探讨性能优化、查询调试和索引优化等关键主题,以提升查询效率和搜索准确性。
Mybatis的Mapper方式整合elasticsearch的DSL调用,之前的AOP进行了改进,使用cglib动态代理生成代理类,基于接口和代理生成bean注入的方式进行调用
Django Elasticsearch DSL Django Elasticsearch DSL是一个软件包,它允许在Elasticsearch中索引Django模型。 它是作为的薄包装而构建的,因此您可以使用elasticsearch-dsl-py团队开发的所有功能。 您可以在查看完整...
基于 Splunk 的 SPL 查询语言转换成 ElasticSearch 的 DSL。 转换结果和 对齐。 可以配置 进行表达式搜索。 Usage const converter = require("./lib/converter") try { const { target, dev } = converter.parse(`...
弹性搜索 建造状态 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
django-elasticsearch-dsl-drf:将Elasticsearch DSL与Django REST框架集成
资源分类:Python库 所属语言:Python 资源全名:django-elasticsearch-dsl-drf-0.1.6.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
EsParser php的操作类库,通过写sql来转化dsl来查询elasticsearch作曲家使用{ "require": { "qieangel2013/esparser": "dev-master" }}composer installrequire __DIR__.'/vendor/autoload.php';//$sql = 'select * ...
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)...
弹性搜索DSL 引入Elasticsearch DSL库以为和客户端提供客观的查询构建器。 您可以轻松构建任何Elasticsearch查询并将其转换为数组。 如果您需要任何帮助,则是询问ONGR支持问题的首选和推荐方法。 如果您喜欢这个...
Elasticsearch+thinkphp5.1后台管理索引和文档+权限管理,可查看https://blog.csdn.net/weixin_39934453/article/details/120097526
该工具将sql转换为elasticsearch dsl 目前支持: sql和表达式 sql或表达式 等于(=)支持 不等于(!=)支持 gt(>)支持 gte(> =)支持 lt(<)支持 lte(<=)支持 sql in(例如(1,2,3)中的id...
包es提供了Elasticsearch查询DSL。 关于 不建议使用Go“点导入”,但是,如果您想在这种情况下利用点导入的表现力,我建议将此逻辑抽象为更高级别的查询功能和程序包。 我不建议直接将其点导入其他包中。 例子 丽皮...
elasticsearch嵌套聚合dsl
Elasticsearch 查询 DSL 备忘单 方便的 Elasticsearch 查询/过滤器/聚合列表
Elasticsearch客户端并查询Haskell的DSL 为什么? 搜索不必很困难。 让狗去做。 背书 “猎犬使Elasticsearch几乎可以忍受!” -几乎不满的用户 “ ES是一场噩梦,但《猎狗犬》至少使它可以忍受。” -同一用户,以后...
Elasticsearch兼容性elastic-builder是为5.x查询DSL elastic-builder 。 但是,该库也应可与2.x一起使用。 对于较旧版本的DSL,您可以尝试或 大部分情况下, elastic-builder也与elasticsearch 6.0(alpha)兼容。 ...
资源来自pypi官网。 资源全名:elasticsearch-dsl-5.3.0.tar.gz
用于Kotlin的Elasticsearch查询DSL。 该库旨在最大程度地减少Elasticsearch JSON查询DSL与编写kotlin应用程序时使用的API之间的差距。 它与现有的Java API集成在一起,仅提供了更好的语法来构建查询。 入门 Gradle ...