文档章节

elasticsearch dsl 常用过滤和查询语句

sanshao
 sanshao
发布于 2017/04/09 03:23
字数 942
阅读 55
收藏 0

过滤语句为 从所有数据中查找一个结果集,查询语句则是标示的是查找一个精确的结果集合信息;

查询语句会询问每个文档的字段值与特定值的匹配程度如何

一条过滤语句会询问每个文档的字段值是否包含着特定值:

一条查询语句会计算每个文档与查询语句的相关性,会给出一个相关性评分 _score ,并且 按照相关性对匹配到的文档进行

排序。 这种评分方式非常适用于一个没有完全配置结果的全文本搜索

注:红色部分没有明白什么意思,如果有知道的烦请给予帮助,谢谢。。。。

1、索引中的数据为:

curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty'
{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "dsltest",
        "_type" : "dsltesttype",
        "_id" : "2",
        "_score" : 0.2876821,
        "_source" : {
          "age" : 30,
          "date" : "2017-09-01",
          "public" : true,
          "tag" : [
            "full_text"
          ],
          "title" : "how to make second"
        }
      },
      {
        "_index" : "dsltest",
        "_type" : "dsltesttype",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "age" : 26,
          "date" : "2014-09-01",
          "public" : true,
          "tag" : [
            "full_text",
            "nosql"
          ],
          "title" : "how to make millions"
        }
      }
    ]
  }
}

过滤语句:

term 过滤的是单个字段,用的是对象的方式,如果多个字段会报 [term] query does not support array of values term为过滤语句,所以不能添加match匹配信息

语法:
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"term":{"age":26}}}'

terms 过滤的是多个字段,用的是数组的方式;如果用对象的方式则会报错

terms中数组中的多个字段 标示的是 或者(OR)的关系

curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"terms":{"title":["make"]}}}'

range 查找范围内的数据:包括 gt大于  gte 大于等于  lt小于 lte小于等于

查找 年龄大于等于30的数据
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"range":{"age":{"gte":30}}}}'

exists 查找包含 某一个字段的数据 

获取包含title字段的数据
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"exists":{"field":"title"}}}'

如果存在多个过滤条件则通过 bool进行处理

must :: 多个查询条件的完全匹配,相当于 and 。

must_not :: 多个查询条件的相反匹配,相当于 not 。

should :: 至少有一个查询条件匹配, 相当于 or 。

多个过滤条件使用的方式为:

表示的是:过滤title中包含 make 同时age大于等于 27的数据
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"bool":{"must":{"term":{"title":"make"}},"must":{"range":{"age":{"gte":27}}}}}}'

查询语句:

match_all 查询所有的数据

curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"match_all":{}}}'
类似于:
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty'

match 查询匹配对应的词 对title进行分词查询结果

curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"match":{"title":"make"}}}'

multi_match 多字段匹配:查找 字段title中为make的数据,其中fields中的字段不一定存在

curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"multi_match":{"query":"make","fields":["title"]}}}'

如果同时存在多个同样也是用的 bool 查询bool和过滤bool相同 查询条件的使用方式为:

查询语句中 title中包含 make和second 或者 age包含26的数据
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"bool":{"must":[{"match":{"title":"make"}},{"match":{"title":"second"}}],"should":{"match":{"age":26}}}}}'

同时包含 过滤 条件 和查询条件的语句方式为:[查询的为:title为make 同时 age 大于等于26,同时title为make过滤]

当前版本 5.2.2已经没有啦 filtered过滤字段,更改为bool 如果对查询和过滤合并处理的方式为
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query": {"bool": {"must":{"match":{"title":"make"}},"filter": {"bool": {"must": [{"term": {"title": "make"}}, {"range": {"age": {"gte": 26}}}]}}}}}'

 

 

 

© 著作权归作者所有

共有 人打赏支持
sanshao
粉丝 1
博文 24
码字总数 9427
作品 0
上海
后端工程师
私信 提问
Elasticsearch如何实现 SQL语句中 Group By 和 Limit 的功能

有 SQL 背景的同学在学习 Elasticsearch 时,面对一个查询需求,不由自主地会先思考如何用 SQL 来实现,然后再去想 Elasticsearch 的 Query DSL 如何实现。那么本篇就给大家讲一条常见的 SQ...

rockybean
05/21
0
0
ElasticSearch聚合分析

聚合用于分析查询结果集的统计指标,我们以观看日志分析为例,介绍各种常用的ElasticSearch聚合操作。 目录: 查询用户观看视频数和观看时长 聚合分页器 查询视频uv 单个视频uv 批量查询视频...

-Finley-
08/19
0
0
spring-data-elasticsearch 实战案例详解(四)

本文提纲 一、搜索实战场景需求 二、运行 spring-data-elasticsearch-query 工程 三、spring-data-elasticsearch-query 工程代码详解 一、搜索实战场景需求 搜索的场景会很多,常用的搜索场景...

夜黑人模糊灬
05/13
0
0
Elasticsearch Rest Client bboss v5.0.9.5 发布

The best Elasticsearch Highlevel Rest Client API-----bboss v5.0.9.5 发布。 主要功能特色 ElasticSearch兼容性:2.x,5.x,6.x,+ JDK兼容性: jdk 1.6+ Spring boot兼容性:1.x,2.x ORM和DSL......

bboss
09/05
0
0
(一)ElasticSearch-入门

目录: 一.前言 二.安装 三.索引 四.搜索 五.聚合 六.分布式的特性 一.前言 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄...

Deng_Wu
08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
36分钟前
0
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
38分钟前
0
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
45分钟前
2
0
小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
今天
3
0
聊聊storm trident batch的分流与聚合

序 本文主要研究一下storm trident batch的分流与聚合 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout) .p......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部