总结一个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查询的更多相关文章

  1. ElasticSearch DSL 查询

    公号:码农充电站pro 主页:https://codeshellme.github.io DSL(Domain Specific Language)查询也叫做 Request Body 查询,它比 U ...

  2. Elasticsearch Query DSL查询入门

    本篇为学习DSL时做的笔记,适合ES新手,大佬请略过~ Query DSL又叫查询表达式,是一种非常灵活又富有表现力的查询语言,采用JSON接口的方式实现丰富的查询,并使你的查询语句更灵活.更精确.更 ...

  3. 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 分页 ...

  4. elasticsearch的dsl查询

    测试es的dsl查询,准备数据,在插入数据的时候,如果index.type.mapping都没有,es会自动创建 一.数据的准备 curl -XPOST "http://192.168.99 ...

  5. 【转】elasticsearch的查询器query与过滤器filter的区别

    很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单-  当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...

  6. ELK学习笔记(五)简单搜索和DSL查询

    检索文档 现在我们有一些数据存储在Elasticsearch中,我们可以开始处理这个应用程序的业务需求. 这在Elasticsearch中很容易.我们只需执行HTTP GET请求并指定文档的地址--索 ...

  7. ElasticSearch 常用查询语句

    为了演示不同类型的 ElasticSearch 的查询,我们将使用书文档信息的集合(有以下字段:title(标题), authors(作者), summary(摘要), publish_date(发布 ...

  8. 基于百度地图SDK和Elasticsearch GEO查询的地理围栏分析系统(1)

    本文描述了一个系统,功能是评价和抽象地理围栏(Geo-fencing),以及监控和分析核心地理围栏中业务的表现. 技术栈:Spring-JQuery-百度地图WEB SDK 存储:Hive-Elast ...

  9. Elasticsearch Kibana查询语法

    Elasticsearch Kibana查询语法 2018年06月03日 23:52:30 wangpei1949 阅读数:3992   Elasticsearch Kibana Discover的搜 ...

随机推荐

  1. nginx服务器搭建以及配置

    2019年第一篇博客,在新的一年祝大家新年快乐,技术更上一层楼. 今天在公司搞了好长时间的nginx服务器搭建,以及遇到的问题,总结一下,方便查询 这里使用的是百度云的服务器,CentOS7系统的 N ...

  2. Java中的简单工厂模式(转)

    Java中的简单工厂模式 举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的 ...

  3. 面试:C++二叉树遍历(递归/非递归)

    #include <vector> #include <stack> #include <queue> using namespace std; struct Tr ...

  4. CORS实践

    $.ajax("http://yafbox.18touch.com/", { type: "POST", data: {id:id,v:v}, //header ...

  5. 如何优雅的控制goroutine的数量

    1,为什么要控制goroutine的数量? goroutine固然好,但是数量太多了,往往会带来很多麻烦,比如耗尽系统资源导致程序崩溃,或者CPU使用率过高导致系统忙不过来.比如: ; i < ...

  6. [转]Linux 微擎系统搭建

    本文转自:https://www.cnblogs.com/voidking/p/5296552.html 前言 时隔一年半,再次接触微信公众平台开发.相比于掌上大学.圈里.微站ABC.图灵机器人.小i ...

  7. tomcat 防火墙如何设置

    tomcat 防火墙能够有效的防护我们电脑,那么我们要怎么样去设置呢?下面由学习啦小编给你做出详细的tomcat 防火墙设置方法介绍!希望对你有帮助! tomcat 防火墙设置方法一: 1.为tomc ...

  8. sqlserver 删除表中数据 id 从1开始

    TRUNCATE  TABLE  TbName   --TbName是表名 但如果TbName中某些字段与其它表有主外键关系,会报错: 无法截断表 'Plants',因为该表正由 FOREIGN KE ...

  9. Java基础——死锁

    1.关于死锁,百度百科的解释: 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,他们将都无法进行下去.此时称系统处于死锁状态或系统产生了死锁 ...

  10. MyBatis开发Dao层的两种方式(原始Dao层开发)

    本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...