elasticsearch入门使用(三) Query DSL
Elasticsearch Reference [6.2] » Query DSL
参考官方文档 :https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html
一、组合查询 Compound queries
- Constant Score Query 指定_score分数查询
GET /_search
{
"query": {
"constant_score" : {
"filter" : {
"term" : { "user" : "kimchy"}
},
"boost" : 1.2
}
}
}
must:查询的条件必须在匹配的文档中,并计算相似度得分
filter:必须满足条件,不会计算相似度得分
should:满足子条件的一个或者多个,满足的格式可以通过"minimum_should_match" : 1设置,类似 OR (如果查询中包filter则至少满足一个should)
must_not:返回的文档必须不满足条件,类似 NOT
tips : 日期格式在添加文档和搜索的时候加上T,字符串不区分大小写 如pek

GET /stu/_search
{
"query": {
"bool": {
"must": [
{ "match": { "address":"上海市 保德路 闸北区"}}
],
"filter": [
{"term":{ "id": 11 }},
{"term":{ "city": "pek" }},
{"range":{"regdate": {"gte": "2018-03-03T15:33:32","lte":"2018-03-03T15:33:33"}}}
],
"should":[
{"term":{ "score": 80.8 }},
{"term":{ "score": 80.0 }}
],
"must_not":[{
"term" : { "age" : 30 }
}],
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}
二、查询上下文
Query Context:文档和查询条件的匹配度,出了决定是否与文档匹配外,还会计算查询条件和文档的匹配度_score
GET /_search
{
"query" : {
"term" : { "user" : "kimchy" }
}
}
三、过滤上下文
Filter context: 精确搜索文档和查询是否匹配,不会去计算匹配度,主要用于过滤结构化数据.
经常使用的过滤器会被elasticsearch自动缓存,以提高查询效率
示例:title中包含search、content中包含elasticsearch 且 status="published" & publish_date >="2015-01-01"
filter里的term、range
GET /_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search"}},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
四、查询所有
查询所有_score的文档,(注:boost的默认值是 1.0)
GET /_search
{
"query": {
"match_all": {}
}
}
查询_score=1.2的所有文档
GET /_search
{
"query": {
"match_all": { "boost" : 1.2 }
}
}
五、全文查询
query:查询字段message中包含 " this is test " , 注意 "to be or not to be" 属于停顿词,过滤器默认会把remove调,设置zero_terms_query:"all"启用
另operator/zero_terms_query非必填参数,更详细内容查看match query官方文档
GET /_search
{
"query": {
"match" : {
"message" : {
"query" : "to be or not to be,this is test",
"operator" : "and",
"zero_terms_query": "all"
}
}
}
}
match_phrase从分析文本"this is a test"中创建一组词去查询,analyzer分词器也可以使用ik等中文分词器
GET /_search
{
"query": {
"match_phrase" : {
"message" : {
"query" : "this is a test",
"analyzer" : "standard"
}
}
}
}
match_phrase_prefix与match_phrase类似,只是它允许在文本中的最后一个词的前缀匹配
GET /_search
{
"query": {
"match_phrase_prefix" : {
"message" : "quick brown f"
}
}
}
multi_match匹配查询上以允许多字段查询(subject/message字段):
GET /_search
{
"query": {
"multi_match" : {
"query": "this is a test",
"fields": [ "subject", "message" ]
}
}
}
5.Common Terms Query
common:停顿词配置相关如 " the to be "等
6.Query String Query
query_string:没理解看官方文档
7.Simple Query String Query
simple_query_string: 与query_string查询不同的是,simple_query_string查询永远不会抛出异常,并放弃查询的无效部分
GET /_search
{
"query": {
"simple_query_string" : {
"query": "\"fried eggs\" +(eggplant | potato) -frittata",
"fields": ["title^5", "body"],
"default_operator": "and"
}
}
}
elasticsearch入门使用(三) Query DSL的更多相关文章
- Elasticsearch入门教程(三):Elasticsearch索引&映射
原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文 ...
- ElasticSearch入门 第三篇:索引
这是ElasticSearch 2.4 版本系列的第三篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套
这是ElasticSearch 2.4 版本系列的第六篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- ElasticSearch入门 第九篇:实现正则表达式查询的思路
这是ElasticSearch 2.4 版本系列的第九篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- ElasticSearch入门 第五篇:使用C#查询文档
这是ElasticSearch 2.4 版本系列的第五篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- ElasticSearch查询 第三篇:词条查询
<ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...
- ElasticSearch入门 第四篇:使用C#添加和更新文档
这是ElasticSearch 2.4 版本系列的第四篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- ElasticSearch入门点滴
这是Elasticsearch-6.2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ...
- ElasticSearch入门 第二篇:集群配置
这是ElasticSearch 2.4 版本系列的第二篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
随机推荐
- leetcode_day1
1.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样 ...
- QT +自定义控件-spin+slider
动手实现自定义控件: 1.首先在ui界面中添加一个(Widget)容器类.如图中的1所示 2.在项目中添加一个SmallWidget类,如下: 3.接着在程序编辑界面进行程序编辑如下: #includ ...
- JavaScript中数据类型和typeof返回的数据类型
除了上图,要注意三点:1.symbol是ES6中新增的数据类型 2.typeof(null)结果是Object 3.typeof(Object)和typeof(Array)的结果是function,因 ...
- EF关于报错Self referencing loop detected with type的原因以及解决办法
1)具体报错 { "Message": "出现错误.", "ExceptionMessage": "“ObjectContent` ...
- 前台解析json的方法
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
- Authentication token manipulation error报错解决办法
Authentication token manipulation error报错解决办法 #参考http://blog.163.com/junwu_lb/blog/static/1916798920 ...
- 连接器前置挂载U盾
连接器前置挂载U盾 1. 宿主机配置及其信息 虚拟化软件版本 主机名 宿主机IP 账号及其密码 WorkStation windows idca- vm01 172.16.6.30 * Qemu-kv ...
- clover如何使用UEFI引导和EFI驱动选择
EFI分区实际上是一个FAT格式的分区,不一定要是第一个分区,GPT磁盘下任何一个FAT文件格式的分区都可以用来放EFI引导文件.主板UEFI先默认引导你所设置的第一优先启动分区下的\EFI\boot ...
- [POJ] 3362 Telephone Lines
Telephone Lines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7978 Accepted: 2885 Descr ...
- Ubuntu 18.04修改默认源
安装Ubuntu 18.04后,使用国外源太慢了,修改为国内源会快很多. 修改阿里源为Ubuntu 18.04默认的源 备份/etc/apt/sources.list #备份 cp /etc/apt/ ...