elasticSearch-DSL
DSL:
query_string
match
match_phrase
match_phrase_prefix
multi_match
simple_query_string
term
terms
bool(must,should,must_not)
match
filter
多索引查询
主要参数说明
聚合aggs
query:
query主要是将要查询的内容进行内部分词后匹配然后获取 or的结果。比如:query “中国人民” 则会查询 内容中有“中”“国”“人”“民”“中国”“人民”“国人”“中国人”“中国人民”
在查询中可使用 OR 或关联 AND 并关联 \***\进行模糊匹配
"query": "kill OR a" "query": "kill AND a" "query": "\"bird\""
注意查询的单词一律用小写,不能用大写,大写内容有特殊含义
query_string 最基本的查询:
全文检索:
POST http://192.168.201.105:9200/_search
{"query":
{"query_string": {
"query": "kill"
}}
}
fields指定属性内检索
POST http://192.168.201.105:9200/_search
{"query":
{"query_string": {
"fields": [
"title"
],
"query": "kill"
}}
}
match 匹配查询:
"match" : {[filed] :[text]}
POST http://192.168.201.105:9200/_search
{"query":
{"match": {
"title": "kill"
}}
}
match 的text中还可以这样写:
POST http://192.168.201.105:9200/_search
{"query":
{"match": {
"title": {
"query": "bird"
}
}}
}
match_phrase 短句查询:
POST http://192.168.201.105:9200/_search
{"query":
{"match_phrase": {
"title": "to kill a"
}}
}
match_phrase_prefix 短句最后不完全字符查询,也就是我们有时知道前缀的模糊查询:
POST http://192.168.201.105:9200/_search
{"query":
{"match_phrase_prefix": {
"title": "to ki"
}}
}
multi_match 多复合查询:
多个可能的值以空格隔开以下就为 title中为 kill 或者 bill的内容。
POST http://192.168.201.105:9200/_search
{"query":
{"multi_match": {
"query": "kill Bill",
"fields": ["title"]
}}
}
如果我们想要对检索的内容进行分级显示:
就要添加type: "best_fields" 以完全匹配最高,
type: "most_fields" 以最多匹配最高
type: "cross_fields" 分词在不同的属性里 simple_query_string 简单query查询:
POST http://192.168.201.105:9200/_search
{"query":
{"simple_query_string": {
"query": "kill Bill",
"fields": ["title"]
}}
}
term 不分词查询:
即如果现在有中国人则 term会完全在分词上去查找“中国人”这个分词,而不会去理会中国,或国人。
post _search
{
"query": {
"term": {
"content": {
"value": "中国人"
}
}
}
}
terms 也是不分词查询,但是支持多个结果以或的形式存在。
post _search
{
"query": {
"terms": {
"content": [
"中国人",
"中国"
]
}
}
}
bool查询(must,should,must_not,filter)
bool可实现联合查询,must必须存在,should可能存在,must_not 一定不存在
must:
post /myindex/_search
{
"query": {
"bool": {
"must": [
{"term": {"title1": "世界"}},
{"term": {"content": "中国"}}
]
}
}
}
should:
post /myindex/_search
{
"query": {
"bool": {
"should": [
{"term": {"title1": "world"}},
{"term": {"content": "中国"}}
]
}
}
}
must_not:
post /myindex/_search
{
"query": {
"bool": {
"must_not": [
{"term": {"title1": "world"}}
]
}
}
}
match:
post /myindex/_search
{
"query": {
"bool": {
"must": [
{"match": {"title1": "world"}}
]
}
}
}
filter:
post /myindex/_search
{
"query": {
"bool": {
"must": [
{"match": {"title1": "world"}}
],
"filter":[
{"match": {"content": "china"}},
{"range":{"title":{"gte":"2018-7-1"}}}
]
}
}
}
多索引查询:
当我们想对多个索引下的内容进行查询时
>post http://ip:port/index1,index2,index3,...../_search // 检索index1,index2,index3...索引下的数据
>post http://ip:port/_search //检索所有
>post http://ip:port/_all/_search //检索所有
还可以使用通配符的形式 (*)模糊匹配,(+)另外包括, (-)排除掉
>post http://ip:port/*index,-myindex,+mytest/_search //匹配所有以index结尾,排除掉myindex,包括mytest
日期索引格式的数字支持,先不记录,后面用到再写。
在匹配中有可能所要查找的索引不存在而引发查询报错。为此,需要加参数忽略索引不存在的情况:
主要参数说明:
?ignore_unavailable=true //运行索引不存在
allow_no_indices=true //允许带通配符索引不存在
expand_wildcards=true //允许通配符索引在关闭的情况下访问不报错
human = true // 将输出的结果适合于人阅读,数字会进行人为化,比如2000,变为2k
pretty = true //结果美化,便于查看
version = [versionNo] //版本控制
op_type = [create] //限制操作类型,即此处只允许新建,如果已经存在则不插入也不更新,防止对数据冲击
parent = [id] // 定义父文档的id,约束查询范围
timeout = [3m] // 默认是1m(分钟),可修改时间
fields = [fieldName],[att1] // 指定要输出的json对象的属性
q = [fieldName]:[value] // 快速属性值查找
sort=fieldName:asc // 排序
size=15 //默认是10
aggs 聚合
如同sql一样,可以对查询的结果进行聚合
有平均avg,最大max,最小min,但这些聚合用于数字类型
聚合东西比较多,用到的时候再说吧。
post /myindex/_search
{
"aggs" : {
"avg_grade" : { "avg" : { "field" : "age" } }
}
}
elasticSearch-DSL的更多相关文章
- Elasticsearch DSL中Query与Filter的不同
Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. 举个DSL例子 GET _search { "query": { ...
- [elk]elasticsearch dsl语句
例子1 统计1,有唱歌兴趣的 2,按年龄分组 3,求每组平均年龄 4,按平均年龄降序排序 sql转为dsl例子 # 每种型号车的颜色数 > 1的 SELECT model,COUNT(DISTI ...
- elasticsearch DSL查询
总结一个DSL的用法吧,语法网上查去,只记录一点心得,也是研究了半天,太麻烦了 先附上python代码 #!/usr/bin/env python # _*_ coding:utf-8 _*_ fro ...
- Elasticsearch DSL 常用语法介绍
课程环境 CentOS 7.3 x64 JDK 版本:1.8(最低要求),主推:JDK 1.8.0_121 Elasticsearch 版本:5.2.0 相关软件包百度云下载地址(密码:0yzd):h ...
- ElasticSearch DSL 查询
公号:码农充电站pro 主页:https://codeshellme.github.io DSL(Domain Specific Language)查询也叫做 Request Body 查询,它比 U ...
- Elasticsearch DSL语句之连接查询
传统数据库支持的full join(全连接)查询方式. 这种方式在Elasticsearch中使用时非常昂贵的.因此,Elasticsearch提供两种操作可以支持水平扩展 更多内容请参考Elasti ...
- 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实战系列二: ElasticSearch的DSL语句使用教程---图文详解
前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...
- Elasticsearch+Logstash+Kibana教程
参考资料 累了就听会歌吧! Elasticsearch中文参考文档 Elasticsearch官方文档 Elasticsearch 其他——那些年遇到的坑 Elasticsearch 管理文档 Ela ...
- ElasticSearch大数据分布式弹性搜索引擎使用
阅读目录: 背景 安装 查找.下载rpm包 .执行rpm包安装 配置elasticsearch专属账户和组 设置elasticsearch文件所有者 切换到elasticsearch专属账户测试能否成 ...
随机推荐
- SQL优化系列——子查询
sql调优方法: (1)not in子查询优化 尽量避免子查询select * from a where id not in(select id from b); select * from a wh ...
- vue中使用elementUI
引入Element 因为整个项目是依赖ElementUI框架做的,所以采用了全部引入 1,在项目根目录执行命令:npm i element-ui -S进行安装 2,在main.js中引入element ...
- 切换了webview 定位不了的解决方法 (还没有试,记录在此)
# 切换到 webview time.sleep(2) print(driver.contexts) driver.switch_to.context('WEBVIEW_com.tencent.mm: ...
- opengl 无法定位程序输入点_glutInitWithExit于动态链接库glut32.dll上
1.问题:opengl 无法定位程序输入点_glutInitWithExit于动态链接库glut32.dll上 2.环境:vc6.0 win7,64位,opengl. 3.解决:将glut32.dl ...
- opengl 结果白屏解决方法
最近图形学在做上机实验,需要使用到opengl实验操作,可是我的电脑不给力, 不能显示正确结果,每次都是白屏,无法显示应有的结果. 1.问题:opengl 白屏 2.环境:win7系统,64位.机型是 ...
- java打印实心10*10正方形, 空心10*10正方形
public class PrintSquare { public static void main(String[] args) { printSolidSquare(10); System.out ...
- MaidSafe区块链项目白皮书解读
MaidSafe.net宣布项目SAFE到社区 1. 介绍 现有的互联网基础设施越来越难以应付超过24亿互联网用户的需求,这个数字在2017年预计将增长到36亿.今天的架构中,中央中介(服务器)存储并 ...
- [UE4]射击起点、终点的计算方法
一.射击起点,这个简单,一般是以角色的相机位置为作为射击起点,而不是枪口的位置作为起点 二.射击终点,角色朝向 * 射击距离 + 射击起点 角色朝向:单位向量 角色朝向 * 射击距离:向量长度 向量长 ...
- 知识点:linux数据库备份
服务端启用二进制日志 如果日志没有启开,必须启用binlog,要重启mysql,首先,关闭mysql,打开/etc/my.cnf,加入以下几行: [mysqld] log-bin 然后重新启动mysq ...
- Unicode String to a UTF-8 TypedArray Buffer in JavaScript
https://coolaj86.com/articles/unicode-string-to-a-utf-8-typed-array-buffer-in-javascript/