总结一个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. js实现生成中间带图片的二维码

    之前需要实现生成中间带图片的二维码,所以找了半天终于找到一个可以用的.于是在这里记录一下. 下面是需要注意的几点: 1.使用的js为jquery-qrcode 但是已经经过别人的修改,和网上原来的那些 ...

  2. 使用Nagios打造专业的业务状态监控

    想必各个公司都有部署zabbix之类的监控系统来监控服务器的资源使用情况.各服务的运行状态,是否这种监控就足够了呢?有没有遇到监控系统一切正常确发现项目无法正常对外提供服务的情况呢?本篇文章聊聊我们如 ...

  3. mysql sql语句最大长度设置方法

    今天发现了一个错误:Could not execute JDBC batch update 最后发现原因是SQL语句长度大于1M,而我机器上的mysql是默认设置,也就是说mysql通讯的数据包大小设 ...

  4. ASP.NET MVC HtmlHelper 类的扩展方法

    再ASP.NET MVC编程中用到了R语法,在View页面编辑HTML标签的时候,ASP.NET MVC 为我们准备好了可以辅助我们写这些标签的办法,它们就是HtmlHelper.微软官方地址是:ht ...

  5. 【IT笔试面试题整理】丑数

    [试题描述]我们把只包含因子2.3和5的数称作丑数.求按从到大的顺序的第1500个丑数.例如6,8是丑数,而14不是,因为它包含因子7.习惯上把1当作第一个丑数. 根据丑数的定义,丑数应该是另一个丑数 ...

  6. FFmpeg在JAVA中的使用-音频提取&字幕压缩

    由于项目需求中涉及到视频中音频提取,以及字幕压缩的功能,一直在研究ffmpeg,仅仅两个功能,却深受ffmpeg的折磨. 今天谈谈ffmpeg在java中的简单使用,首先下载FFmpeg包,官方地址: ...

  7. Swift基础

    github上找了swift中文翻译,上传到百度云,给大家分享下 链接:http://pan.baidu.com/s/1hqGOxfe 密码:asto

  8. MVC应用程序的jQuery代码重构

    先看看这篇<在jQuery定义自己函数>http://www.cnblogs.com/insus/p/3415444.html 程序越看越是有重构的地方. 先看1部分,由于在#16代码有宣 ...

  9. .net Core 部署到 Linux

    1.环境说明 服务器系统:CentOS 7.4  64位 相关工具:Xshel.Xftp .net Core版本:2.2 VS版本:2017 服务器软件软件:.netcore.nginx.superv ...

  10. Java异常捕获之一道try-catch-finally语句题

    今天,学习了try-catch-finally语句,本来觉得蛮简单.易懂的.搜了一道相关类型的题.结果信心被泼了盆冷水.先把题Mark一下,出去透透风. public class TestEx { p ...