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的搜 ...
随机推荐
- 关于Mybatis与Spring整合之后SqlSession与mapper对象之间数量的问题。
1,sqlsession的真实类型和数量 由于使用spring管理bean,当我们在代码中需要使用这个bean的时候,会首先去容器中找,第一次需要调用MapperFactoryBean的getObje ...
- Scrum 冲刺博客
博客链接集合 Alpha阶段敏捷冲刺 敏捷冲刺一 敏捷冲刺二 敏捷冲刺三 敏捷冲刺四 敏捷冲刺五 敏捷冲刺六 敏捷冲刺七 Alpha阶段敏捷冲刺总结 Alpha阶段敏捷冲刺总结
- 并发编程——ConcurrentHashMap#helpTransfer() 分析
前言 ConcurrentHashMap 鬼斧神工,并发添加元素时,如果 map 正在扩容,其他线程甚至于还会帮助扩容,也就是多线程扩容.就这一点,就可以写一篇文章好好讲讲.今天一起来看看. 源码分析 ...
- 使用authentication进行身份验证,与Forms表单登陆
做到登录时,不像在用自己的逻辑去判断用户是否登陆,就上网搜查,得知还有此方法,这个方法用起来很简单实用,第一次使用,还有很多不理解的地方,记下来方便以后查阅更改. 使用这个方法当然需要了解里面的属性和 ...
- PhpStorm快捷方式
转载源:http://www.cr173.com/html/66775_1.html PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,PhpStorm可随时帮助用 ...
- jquery判断输入框的字符串是否为空或者空格
function checkKey(key) { if($.trim(key) == ''){ /** * 输入的字符串为空,空格 */ alert('请输入关键字'); return false; ...
- 纯HTML和CSS实现JD轮播图
博主使用了纯HTML和CSS实现了JD的轮播图,没有加动态效果,主要是使用了定位的知识. ,如图为两个侧边箭头图片(其实实际中应该使用CSS3的图标字体,这里没有使用). <!DOCTYPE ...
- visual studio 2013 下ef6 CodeFirst 使用SQL Lite 数据库
今天系统的来记录一下再vs2013下,使用ef6 codefirst功能,来操作SQL lite数据库 本来我以为sqlite数据库用的这么多,ef6肯定支持,结果,使用过程中很多坑,现在我把具体的配 ...
- 使用memcache对wordpress优化,提速
环境: 一个本地开发环境 一个部署在虚拟机中( 虚拟机安装memcache缓存),然后用这个优化的版本跟本地开发环境对比. wordpress版本:4.9.5 php:5.6版本 1,首先在主题的fu ...
- Codeforces787D(SummerTrainingDay06-D 线段树+最短路)
D. Legacy time limit per test:2 seconds memory limit per test:256 megabytes input:standard input out ...