elasticsearch DSL查询
总结一个DSL的用法吧,语法网上查去,只记录一点心得,也是研究了半天,太麻烦了
先附上python代码
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
from elasticsearch import Elasticsearch es = Elasticsearch([{'host':'localhost','port':9200}])
index = 'kuaidi'
# 精确匹配
query = {
"query": {
"term": {"iinsertTime": "2017-11-26"}
}
} resp = es.search(index, body=query)
resp_docs = resp['hits']['hits']
for item in resp_docs:
print(item['_source']['content'])
第一个语法:
term过滤:term主要用于精确匹配,如字符串、数值、日期等(不适合情况:1.列中除英文字符外有其它值 2.字符串值中有冒号或中文 3.系统自带属性如_version)
{
"_index": "kuaidi",
"_type": "shang12",
"_id": "11",
"_version": 1, //不可用于DSL中的查询条件
"_score": 1, //不可用于DSL中的查询条件
"_source": { //不可用于DSL中的查询条件
"title": "韵达快递来了", //值中有中文,不可用于查询
"insertTime": "2017-11-26 11:12:00", //值中有冒号,不可用于查询
"insertTime1": "2017-11-2611:12:00", //列中有数字,不可用于查询
"insertTime2": "2017-11-2611120000",
"iinsertTime": "2017-11-26", //可以用于查询
"age": 69, //可以用于查询
"date": "2014-10-03", //可以用于查询
"address": "中国经济网1", //值中有中文,不可用于查询
"address1": "zhonguojinjiwang", //可以用于查询
"content": "南都讯 记者王刚 七旬老太在人行道上行走时,突然被一辆正在倒车的顺丰快递车撞倒,交警认定快递车负全部责任。老太家属称,在送往医院后,老太被初步诊断为右侧肩胛骨骨折且嘴唇有破裂的迹象,目前已经出院,但不确定是否会产生后遗症等情况。顺丰回应称,已支付老太所有医药费,后续将进一步与家属进行协商"
}
}
第二个语法:
terms:跟term有点类似,但可以同时指定多个条件,相当于union all的作用,汇聚所有查询的值
{
"query": {
"term": {"date": ["2014-09-01","2014-10-03"]}
}
} date为2014-09-01和2014-10-03的值都会被查找出来
第三个语法:
range:范围查询
{
"query": {
"range":{
"age":{ //查询age字段
"gte":60, //大于60
"lt":70 //小于70
}
}
}
}
第四个语法:
exists: 此索引中包含指定字段的所有数据(即此字段值不为空)
missing:此索引中不包含指定字段的所有数据(即此字段的值为空)
{
"query": {
"missing":{
"field":"age" // age字段为空的所有数据
}
}
}
第五个语法:
bool过滤:用来合并多个过滤条件的查询结果的布尔逻辑,必须包含must和should中的一个或多个。它包含以下一些操作
must: 相当于and
must_not: 相当于 not
should: 相当于or(连接多个匹配条件,列表形式)
{
"query": {
"bool":{
"must":{ //and age==50
"term":{"age":50}
},
"must_not":{ //not date=2014-09-01
"term":{"date": "2014-09-01"}
},
"should":[ // _id==8 or _id=9 (举的不太恰当)
{"term":{"_id":8}},
{"term":{"_id":19}}
]
}
}
}
第六个语法:
match: 一个标准的查询,它可以精确或模糊查询
{
"query": {
"match":{
"title":"起火 快递" // title中包含起火 或快递
}
}
}
另一个变种
multi_match: 同时对多个字段,多个关键字查询
{
"query": {
"multi_match":{
"query":"老人 起火", // 查询关键字,多个关键字之间是或的关系
"fields":['title','address'] // title或address字段中有老人或起火字段
}
}
}
第七个语法:
正则:regexp
{
"query": {
"regexp":{
"title":".+[0-9]*.+" //匹配 任意字符 任意数字 任意字符
}
}
}
第八个语法:
以什么开关:prefix
{
"query": {
"prefix":{
"_id":1 // _id 以1开头的数据,不适合值为中文
}
}
}
第九个语法:
短语匹配:phrase_match ,寻找邻近的几个单词,我理解为精确短语匹配,即查找的短语不会被分词查找
{
"query": {
"match_phrase":{
"content":"china reference" // content中包含china reference而不是chian 或 reference
}
}
}
十、列举几个查询的例子
{
"query": {
"match":{"content":"起火"}, # content 有起火
"match":{"title":"快递"}, # 并且 title 有快递
"match":{"author":"kongzhagen"} # 并且 author 为kongzhagen
}} {
"query": {
"multi_match":{
"query":"快递"
,"fields":["title", "content"] # title 或 content 中有快递
}
}} {
"query": {
"bool":{
"must":{
"match":{"content":"快递"}, # content 中包含快递的所有数据
},"filter":{
"multi_match":{
"query":"顺丰 百世 EMS", # 结果中查找 content 包含 顺丰 或 百世 或 EMS 的所有数据
"fields":["content"]
}
}
}
}
}
elasticsearch DSL查询的更多相关文章
- ElasticSearch DSL 查询
公号:码农充电站pro 主页:https://codeshellme.github.io DSL(Domain Specific Language)查询也叫做 Request Body 查询,它比 U ...
- Elasticsearch Query DSL查询入门
本篇为学习DSL时做的笔记,适合ES新手,大佬请略过~ Query DSL又叫查询表达式,是一种非常灵活又富有表现力的查询语言,采用JSON接口的方式实现丰富的查询,并使你的查询语句更灵活.更精确.更 ...
- ES 20 - 查询Elasticsearch中的数据 (基于DSL查询, 包括查询校验match + bool + term)
目录 1 什么是DSL 2 DSL校验 - 定位不合法的查询语句 3 match query的使用 3.1 简单功能示例 3.1.1 查询所有文档 3.1.2 查询满足一定条件的文档 3.1.3 分页 ...
- elasticsearch的dsl查询
测试es的dsl查询,准备数据,在插入数据的时候,如果index.type.mapping都没有,es会自动创建 一.数据的准备 curl -XPOST "http://192.168.99 ...
- 【转】elasticsearch的查询器query与过滤器filter的区别
很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单- 当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...
- ELK学习笔记(五)简单搜索和DSL查询
检索文档 现在我们有一些数据存储在Elasticsearch中,我们可以开始处理这个应用程序的业务需求. 这在Elasticsearch中很容易.我们只需执行HTTP GET请求并指定文档的地址--索 ...
- ElasticSearch 常用查询语句
为了演示不同类型的 ElasticSearch 的查询,我们将使用书文档信息的集合(有以下字段:title(标题), authors(作者), summary(摘要), publish_date(发布 ...
- 基于百度地图SDK和Elasticsearch GEO查询的地理围栏分析系统(1)
本文描述了一个系统,功能是评价和抽象地理围栏(Geo-fencing),以及监控和分析核心地理围栏中业务的表现. 技术栈:Spring-JQuery-百度地图WEB SDK 存储:Hive-Elast ...
- Elasticsearch Kibana查询语法
Elasticsearch Kibana查询语法 2018年06月03日 23:52:30 wangpei1949 阅读数:3992 Elasticsearch Kibana Discover的搜 ...
随机推荐
- FineBI学习系列之FineBI的Windows里安装步骤(图文详解)
不多说,直接上干货! 先进入FineBI官网. http://www.finebi.com/product/download/ windows系统里FineBI的安装流程 1.从FineBI官网下载 ...
- tensorflow 在同一个GPU同时加载多张相同的图
saver = self.tf_instance.train.Saver() self.sess = self.tf_instance.Session(config=sess_config, grap ...
- redis开机自动服务脚本
1.设置redis.conf中daemonize为yes,确保守护进程开启. 2.编写开机自启动脚本 基本原理为: 系统开机启动时会去加载/etc/init.d/下面的脚本,通常而言每个脚本文件会自定 ...
- Java NIO系列教程(三) Buffer
Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的.交互图如下: 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被 ...
- [Golang] GOROOT、GOPATH和Project目录说明
go env环境查看 用go env 可查看当前go环境变量. $ go env GOARCH="amd64" GOBIN="" GOEXE="&qu ...
- 浅析Java源码之HttpServlet
纯粹是闲的,在慕课网看了几集的Servlet入门,刚写了1个小demo,就想看看源码,好在也不难 主要是介绍一下里面的主要方法,真的没什么内容啊~ 源码来源于apache-tomcat-7.0.52, ...
- RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
一.理论: .net环境下,C#代码调用RabbitMQ消息队列,本文用easynetq开源的.net Rabbitmq api来实现. EasyNetQ 是一个易于使用的RabbitMQ的.Net客 ...
- 基于Spring Security2与 Ext 的权限管理设计与兑现
基于Spring Security2与 Ext 的权限管理设计与实现 一.Spring Security介绍 Spring Security的前身Acegi,其配置及使用相对来说复杂一些,因为要配置的 ...
- EF Codefirst(二)数据注释
CodeFirst通过分析我们在代码里编写的类,以及类之间的关系生成数据库表,以及表之间的各种关系.数据库的表会涉及到主键,外键,列是否为空,列类型等等. 我们要通过怎样的方式来暴露这些信息呢? ...
- Python 进阶必备函数
1. lambda 表达式 匿名函数(英语:anonymous function)是指一类无需定义标识符(函数名)的函数.通俗来说呢,就是它可以让我们的函数,可以不需要函数名. 正常情况下,我们定义一 ...