总结一个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. JavaScript -- URL编码

    ----- 010-escape.html ----- <!DOCTYPE html> <html> <head> <meta http-equiv=&quo ...

  2. vue-cli 使用better-scroll

    better-scroll  api文档https://ustbhuangyi.github.io/better-scroll/doc/zh-hans/ 一:安装better-scroll 插件 cn ...

  3. 解析js中( ( ) { } ( ) )的含义

    //实例var tensquared=(function(x) { return x*x; }(10)); 首先我们来拆解这一行语句: 一. var tensquared = xx; 这是赋值语句: ...

  4. 异步消息队列Celery

    Celery是异步消息队列, 可以在很多场景下进行灵活的应用.消息中包含了执行任务所需的的参数,用于启动任务执行, suoy所以消息队列也可以称作 在web应用开发中, 用户触发的某些事件需要较长事件 ...

  5. core Animation之CATransition(转场动画)

    用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果.iOS比Mac OS X的转场动画效果少一点 UINavigationController就是通过CATransition实现了将控制器的视图 ...

  6. Bower前端模块管理器

    cnpm install bower -g 安装bower bower install jquery //bower会自动去网上找到最新版本的jquery bower uninstall jquery ...

  7. 【转】.NET NPOI操作Excel常用函数

    最近因项目接触了NPOI,感觉还是蛮不错的,网络上的教程普遍版本较老,本篇记录所常用操作,采用NPOI 2.0版本. 推荐: NPOI官方网站 NPOI 1.2.4/1.2.5 官方教程 新建Exce ...

  8. [android] ndk环境的搭建

    C语言的编辑加运行,分两步 编译阶段 连接阶段 java语言的步骤是 转成.class文件  java的虚拟机运行 C语言在windows上==> .o中间文件 ==>.exe可执行文件 ...

  9. 撩课-Web大前端每天5道面试题-Day33

    1.CommonJS 中的 require/exports 和 ES6 中的 import/export 区别? CommonJS 模块的重要特性是加载时执行, 即脚本代码在 require 的时候, ...

  10. js 实现 Base64 编码的相互转换

    干脆点,直接贴代码 1. 代码 function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZab ...