lasticsearch查询模式

一种是像传递URL参数一样去传递查询语句,被称为简单查询

GET /library/books/_search //查询index为library,type为books的全部内容
GET /library/books/_search?q=price:10 //查询index为library,type为books中price等于10的

另一种是DSL语句来进行查询,被称为DSL查询,term和match就属于DSL

term查询

term是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇

格式

GET /library/books/_search       #这里是变化的,指定index和type;(比如说index为library,type为books)
{
"query": {
"term": {
"key": "value" #这里是变化的,比如说查询title等于elasticsearch的内容
}
}
}

实例1:查询index为library,type为books重title等于elasticsearch的内容

GET /library/books/_search
{
"query": {
"term": {
"title": "elasticsearch"
}
}
}

match查询

match和term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程

match查询相当于模糊匹配,只包含其中一部分关键词就行

格式

GET /library/books/_search
{
"query":{
"match":{
"key":"value"
}
}
}

实例1:过滤出preview字段中包含"elasticsearch"的索引,并且只显示preview和title字段

GET /library/books/_search
{
"fields":["preview","title"]
"query":{
"match":{
"preview":"elasticsearch"
}
}
}

match_all查询

查询指定索引下的所有文档

实例1:过滤出index为library,type为books的所有文档

GET /library/books/_search
{
"query":{
"match_all":{}
}
}

实例2:通过match_all过滤出所有字段,然后通过partial在过滤出包含preview的字段和排除title,price的字段

GET /library/books/_search
{
"partial_fields":{
"partial":{
"include":["preview"], #包含preview字段的文档
"exclude":["title,price"]    #排除title,price字段
},
"query":{
"match_all":[]
}
}
}

match_phrase查询

短语查询,slop定义的是关键词之间隔多少未知单词

格式

GET /library/books/_search
{
"query":{
"match_phrase" :{
"query":"Elasticsearch,distributed",
"slop":2 #表示Elasticsearch和distributed之间隔多少单词
}
}
}

multi_match查询

可以指定多个字段

实例1:查询title和preview这两个字段都包含Elasticsearch关键词的文档

GET /library/books/_search
{
"query":{
"multi_match":{
"query":"Elasticsearch"
"fields":["title","preview"]
}
}
}

filter过滤查询

查询同时,通过filter条件在不影响打分的情况下筛选出想要的数据

简单的filter查询

实例1:先查询index为library,type为books的全部文档;再过滤price等于20的

GET /store/products/_search
{
"query": {
"filtered":{
"query":{
"match_all": {} #先查询index为store,type
},
"filter": {
"term" :{
"price":20 #这里是条件,price等于20的
}
}
}
}
}

filter之bool过滤查询

格式

{
"bool":{
"must" : [],
"should" : [],
"must_not" : [],
}
}
#must:条件必须满足,相当于sql语句的and
#should:条件可以满足也可以不满足,相当于sql语句的or
#must_not:条件不需要满足,相当于sql语句的not

实例1:查询价格等于20或者productID等于SD1002136的商品,再排除价格等于30的

GET /store/products/_search
{
"query": {
"filtered":{
"filter":{
"bool":{
"should": [
{"term" : {"price" : 20}},
{"term" : {"productID" : "SD1002136"}}
],
"must_not": {
"term" :{"price":30}
}
} }
}
}
}

filter之and,not,or查询

没有bool,也可以直接使用and,or,not

实例1:and用法,查询价格是10元并且productID又是SD1002136的结果

GET /store/products/_search
{
"query":{
"filtered":{
"filter":{
"and":[
{
"term":{
"price":10
}
},
{
"term":{
"productID":"SD1002136"
}
}
]
},
"query":{
"match_all": {}
}
}
} }

实例2:or用法,查询价格是10元或者productID是SD4535233的商品

GET /store/products/_search
{
"query":{
"filtered":{
"filter":{
"or":[
{
"term":{
"price":10
}
},
{
"term":{
"productID":"SD4535233"
}
}
]
},
"query":{
"match_all":{}
}
}
}
}

实例3:not用法,查询productID不是SD1002136的商品

GET /store/products/_search
{
"query":{
"filtered":{
"filter":{
"not":{
"term":{
"productID":"SD1002136"
}
}
},
"query":{
"match_all": {}
}
}
}
}

filter之range范围查询

格式

GET /store/products/_search
{
"query":{
"filtered":{
"filter":{
"range":{
"key":{
"条件" : value1
"条件": value2
}
}
}
}
}
}

条件

gt : 大于
lt : 小于
gte : 大于等于
lte :小于等于

实例1:查询price大于等于20小于等于40的结果

GET /store/products/_search
{
"query":{
"filtered":{
"filter":{
"range":{
"price":{
"gte" : 20,
"lte" : 40
}
}
}
}
}
}

Elasticsearch学习系列之term和match查询的更多相关文章

  1. Elasticsearch学习系列之term和match查询实例

    Elasticsearch查询模式 一种是像传递URL参数一样去传递查询语句,被称为简单查询 GET /library/books/_search //查询index为library,type为boo ...

  2. ElasticSearch 学习记录之父子结构的查询

    父子结构 父亲type属性查询子type 的类型 父子结构的查询,可以通过父亲类型的字段,查询出子类型的索引信息 POST /product/_search { "query": ...

  3. Elasticsearch学习系列三(搜索案例实战)

    Query DSL Es提供了基于JSON的完整查询DSL(Domain Specific Language 特定域的语言)来定义查询.将查询DSL视为查询的AST(抽象语法树).它由两种子句组成: ...

  4. Elasticsearch学习系列一(部署和配置IK分词器)

    Elasticsearch简介 Elasticsearch是什么? Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储.检索数据.本身扩展性很好,可扩展 ...

  5. Lucene/ElasticSearch 学习系列 (1) 为什么学,学什么,怎么学

    为什么学 <What I wish I knew When I was 20>这本书给了我很多启发.作者在书中提到,Stanford 大学培养人才的目标是 ”T形人才“:精通某个领域,但对 ...

  6. Elasticsearch学习之深入搜索一 --- 提高查询的精准度

    1. 为帖子增加标题字段 POST /forum/article/_bulk { "} } { "doc" : {"title" : "th ...

  7. Elasticsearch学习系列二(基础操作)

    本文将分为3块讲解Es的基础操作.分别为:索引(index).映射(mapping).文档(document). 索引操作 创建索引库 语法: PUT /索引名称{ "settings&qu ...

  8. Lucene/ElasticSearch 学习系列 (2) Information Retrival 初步之名词解释

    计算机领域一半是理论,一半是在理论基础之上的应用.要想深入地掌握某个方面的应用,就需要先学习那方面的理论. “搜索”是应用,其背后的理论是 "Information Retrieval&qu ...

  9. Elasticsearch学习系列之多文档操作mget

    测试数据 GET /library/books/1 { "_index": "library", "_type": "books& ...

随机推荐

  1. windows 下配置 Nginx 常见问题

    因为最近的项目需要用到负载均衡,不用考虑,当然用大名鼎鼎的Nginx啦.至于Nginx的介绍,这里就不多说了,直接进入主题如何在Windows下配置. 我的系统是win7旗舰版的,到官网下载最新版本 ...

  2. OpenShift-OKD3.10基础环境部署

    单master + 双node 1.主机角色划分 #采用双网段部署 0 网段是opesnshift内部通信IP,1 网段是连接外网通信地址 #master master.example.com 192 ...

  3. 大数据入门第二十三天——SparkSQL(一)入门与使用

    一.概述 1.什么是sparkSQL 根据官网的解释: Spark SQL is a Spark module for structured data processing. 也就是说,sparkSQ ...

  4. Python3入门(一)——概述与环境安装

    一.概述 1.python是什么 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和 ...

  5. python 优雅地实现插件架构

    近日,决定用 python 实现插件架构,于是上 stackoverflow 逛了一下,在这里发现一段代码,非常喜欢. 提醒各位大侠注意,我对这段代码作了一点小小的改动:原 PLUGINS 是 lis ...

  6. Caffe 深度学习框架上手教程

    Caffe 深度学习框架上手教程   blink 15年1月   Caffe (CNN, deep learning) 介绍 Caffe -----------Convolution Architec ...

  7. 类调用自己的静态方法必须把该方法设置为public

    否则调用不了 ParaChecker.isOK(bindingResult); public class ParaChecker { static BaseResult paraCheck(Bindi ...

  8. HTML 中使 footer 始终处于页面底部

    通常在页面中,需要使页脚 footer 部分始终处于底部.当页面高度不够 100% 时, footer 处于页面最底部,当页面内容高于 100% 时,页脚元素可以被撑到最底部. 方法一:绝对定位 &l ...

  9. 利用privoxy劫持http网站数据,插入广告,获取用户名,密码

    看了几篇privoxy的文章,感觉讲的都不详细,在此整理一遍. 注:本文下面的内容仅讨论思路,作为技术交流之用,请勿用作非法途径. Privoxy是一款带过滤功能的代理服务器,针对HTTP.HTTPS ...

  10. JVM技术周报第2期

    JVM技术周报第2期 JVM技术周报分享JVM技术交流群的讨论内容,由群内成员整理归纳而成.如果你有兴趣入群讨论,请关注「Java技术精选」公众号,通过右下角菜单「入群交流」加我好友,获取入群详情. ...