ElasticSearch英文基本查询

本章内容概述

1、基本查询(QUERY查询)
2、结构化查询

1、基本查询(QUERY查询)

1.1 数据准备

先插入数据,以备测试使用
### 创建索引
PUT /lib3

PUT /lib3/user/1
{
  "name":"zhaoliu",
  "address":"hei long jiang tie ling shi",
  "age":50,
  "birthday":"1970-12-12",
  "interests":"hejiu,duanlian,lvyou"
}

PUT /lib3/user/2
{
  "name":"zhaoming",
  "address":"bei jing shi hai dian qu",
  "age":20,
  "birthday":"1998-10-12",
  "interests":"hejiu,changge,wanyouxi"
}


PUT /lib3/user/3
{
  "name":"lisi",
  "address":"bei jing shi chao yang qu",
  "age":28,
  "birthday":"1990-01-11",
  "interests":"biancheng,shuijiao,wanyouxi"
}


PUT /lib3/user/4
{
  "name":"wangwu",
  "address":"bei jing shi fang shan qu",
  "age":26,
  "birthday":"1993-01-11",
  "interests":"changge,tingyinyue,wanyouxi"
}

PUT /lib3/user/5
{
  "name":"zhangsan",
  "address":"zheng zhou shi er qi qu",
  "age":32,
  "birthday":"1988-05-11",
  "interests":"tiaowu,tingyinyue"
}

1.2 基本条件查询

	根据id进行查询 
	
		GET /lib3/user/id值[比如7]

在这里插入图片描述

	查询当前所有类型的文档 
	
		GET /lib3/user/_search

在这里插入图片描述

	根据多个ID批量查询 
	
		GET /lib3/user/_mget
		{
			"ids":["3","5"]
		}

在这里插入图片描述

	根据姓名查询
	
		GET /lib3/user/_search?q=name:li si
		
		GET /lib3/user/_search?q=interests:跳舞		查询不到内容
	
	根据年龄查询:查询年龄21
		
		GET /lib3/user/_search?q=age:21

在这里插入图片描述

	根据年龄区间查询:查询年龄30岁-60岁之间
		
		GET /lib3/user/_search?q=age[30 TO 60]
		注意:TO 一定要大写

在这里插入图片描述

	根据年龄区间查询,并且降序排列:查询年龄30岁-60岁之间 并且年龄降序
		
		GET /lib3/user/_search?q=age[30 TO 60]&sort=age:desc

在这里插入图片描述

1.3 控制查询返回数量

	根据年龄区间查询,降序排列并展示指定数据[分页]:查询年龄30岁-60岁之间 并且年龄降序、从0开始,显示2条数据
		
		GET /lib3/user/_search?q=age[30 TO 60]&sort=age:desc&from=0&size=1

在这里插入图片描述

	根据年龄区间查询,降序排列并展示指定数据[分页],展示直接列:查询年龄30岁-60岁之间 并且年龄降序、从0开始,显示2条数据,
展示name和age字段
		
		GET /lib3/user/_search?q=age[30 TO 60]&sort=age:desc&from=0&size=2&_source=name,age

在这里插入图片描述

2、结构化查询

	ES中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL)。
	
	由于DSL查询更为直观也更为简易,所以大都使用这种方式。

	DSL查询是POST过去一个json,由于post的请求是json格式的,所以存在很多灵活性,也有很多形式。

2.1 查询案例

2.1.1 term查询

	term query 会去倒排索引中寻找确切的term,不进行分词器分析,文档中必须包含整个搜索的词汇,这种查询适合keyword,mumeric
date等。

	1、根据名称精确查询姓名
GET /lib3/user/_search
{
  "query": {
	"term": {
		"name": "li si"
	}
  }
}
		"query":{}  定义查询条件
		"term":{}   定义精确查询
		"name": "li si"   定义精确查询的字段和对应值


	2、根据爱好查询
GET /lib3/user/_search
{
	"query":{
		"term":{
			"interests":"changge"
		}
	}
}
		

2.1.2 terms查询

	terms: 查询某个字段中含有多个关键词的文档
	
	1、查询爱好包含hejiu 或 changge的
GET /lib3/user/_search
{
	"query":{
		"terms":{
			"interests":["changge","hejiu"]
		}
	}
}
	只要包含关键词的一个,都会被查询出来

2.1.3 match模糊查询

	match query 知道分词器的存在,会对字段进行分词操作,然后再查询

	1、根据名称模糊查询
GET /lib3/user/_search
{
  "query": {
	"match": {
		"name": "zhaoming zhaoliu"
	}
  }
}
		"match":{}   定义模糊查询,类似于like
		
		match查询相当于模糊匹配,只包含其中一部分关键词就行

	2、多条件模糊查询	multi_match
GET /lib3/user/_search
{
  "query": {
	"multi_match": {
		"query": "changge",
		"fields": ["interests","name"]
	}
  }
}
		"query" 后面是跟要查询的内容
		"fields" 要查询的字段

2.1.4 结构化分页查询

	1、分页查询
GET /lib3/user/_search
{
  "from": 0,
  "size": 2, 
  "query": {
	"match": {
		"interests": "changge"
	}
  }
			}
		"from"	开始下标
		"size"  数量
			注:类似于limit限定查询

在这里插入图片描述

2.1.5 控制显示字段

	我们之前的查询是把所有的字段都显示出来,我们可以通过_source来控制要显示的字段:
GET /lib3/user/_search
{
  "_source":["name","interests"],
	"query":{
		"match":{
			"interests":"changge"
		}
	}
}
	也可以通过includes和excludes来实现:
GET /lib3/user/_search
{
  "_source":{
	"includes": ["name","interests"],
	"excludes": ["birthday","age"]
  },
	"query":{
		"match":{
			"interests":"changge"
		}
	}
}
	也可以使用通配符来匹配指定的字段:
GET /lib3/user/_search
{
  "_source":{
	"includes": "a*", 
	"excludes": ["name","birthday"]
  },
	"query":{
		"match":{
			"interests":"changge"
		}
	}
}

2.1.6 排序

	使用sort实现排序, desc 降序    asc 升序
GET /lib3/user/_search
{
	"sort": [
	  {
		"age": {
		  "order": "asc"
		}
	  }
	]
	
}

2.1.7 前缀匹配

	匹配以指定前缀开始的字段
GET /lib3/user/_search
{
  "query": {
	"match_phrase_prefix": {
	  "name": "zhao"
	}
  }
}

2.1.8 范围查询

	根据生日范围查询
GET /lib3/user/_search
{
  "query": {
	"range": {
	  "birthday": {
		"gte": "1990-10-10",
		"lte": "2018-05-01"
	  }
	}
  }
}
	当然,也有人喜欢使用from to
GET /lib3/user/_search
{
  "query": {
	"range": {
	  "birthday": {
		"from": "1990-10-10",
		"to": "2018-05-01"
	  }
	}
  }
}
	我们可以设置是否包含最大或最小
GET /lib3/user/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 20,
        "lte": 32,
        "include_lower":true,
        "include_upper":false
      }
    }
  }
}
		gt		相当于	>
		lt		相当于 <
		gte		相当于 >=
		lte		相当于	<=

2.1.9 wildcard查询

	允许使用通配符*和?来进行查询
	
	* 代表0个或多个字符
	
	? 代表任意一个字符
	
	查询姓名以zhao开头后面任意的
GET /lib3/user/_search
{
  "query": {
	"wildcard": {
	  "name": "zhao*"
	}
  }
}
	查询前面是li第三个字符任意,第四个字符是i的
GET /lib3/user/_search
{
  "query": {
    "wildcard": {
      "name": "li?i*"
    }
  }
}

2.1.10 fuzzy实现模糊查询

	当我们对于字段值不太记得时,我们可以通过fuzzy进行大致查询,找到对应匹配的值
GET /lib3/user/_search
{
  "query": {
    "fuzzy": {
      "name": "zholiu"
    }
  }
}


GET /lib3/user/_search
{
  "query": {
    "fuzzy": {
      "interests": {
        "value":"change"
      }
    }
  }
}

2.1.11 高亮搜索结果

GET /lib3/user/_search
{
	"query":{
		"match":{
			"interests":"changge"
		}
	},
	"highlight": {
	  "fields": {
	    "interests": {}
	  }
	}
}
	更多Kibana查询请参考: http://www.mamicode.com/info-detail-2107610.html

2.2 term与match区别

	term查询不会对字段进行分词查询,会采用精确匹配。

	match会根据该字段的分词器,进行分词查询。

ib3/user/_search
{
“query”: {
“fuzzy”: {
“interests”: {
“value”:“change”
}
}
}
}


### 2.1.11 高亮搜索结果

GET /lib3/user/_search
{
“query”:{
“match”:{
“interests”:“changge”
}
},
“highlight”: {
“fields”: {
“interests”: {}
}
}
}


		更多Kibana查询请参考: http://www.mamicode.com/info-detail-2107610.html
		
## 2.2 term与match区别

		term查询不会对字段进行分词查询,会采用精确匹配。

		match会根据该字段的分词器,进行分词查询。
		
		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JTZ001

你的鼓励是我创作的最大动力?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值