创建索引
建立映射关系
http://192.168.15.38:9200/film/_mapping/dongzuo
请求方式:post
{"properties":{"title":{"type":"keyword"},"publishDate":{"type":"date"},"director":{"type":"keyword"},"price":{"type":"float"},"desc":{"type":"text"}}}
1.查询指定索引指定类型下所有数据
http://192.168.15.38:9200/[索引名]/[类型]/_search/
例如:
http://192.168.15.38:9200/film/dongzuo/_search/
查询film索引下类型为dongzuo的所有数据
2.分页查询
http://192.168.15.38:9200/[索引名]/[类型]/_search/
请求方式:POST
参数:
{
"from": [起始位置],
"size": [每页数量]
}
例如:
查询前两条数据
http://192.168.15.38:9200/film/dongzuo/_search/
{
"from": 0,
"size": 2
}
3.排序查询
http://192.168.15.38:9200/[索引名]/[类型]/_search/
请求方式:POST
参数:
{
"sort": [
{
"[排序字段]": {
"order": "[排序类型]" //desc降序 asc升序
}
}
]
}
例如:
按照发布日期降序
http://192.168.15.38:9200/film/dongzuo/_search/
{
"sort": [
{
"publishDate": {
"order": "desc"
}
}
]
}
4.数据列的过滤
http://192.168.15.38:9200/[索引名]/[类型]/_search/
请求方式:POST
参数:
{
"_source": {
"include": [
[查询包括的列]
]
}
}
例如:
查询前三行数据,只查询标题、导演和价格
{
"from": 0,
"size": 3,
"_source": {
"include": [
"title",
"director",
"price"
]
}
}
5.简单条件查询
请求方式:POST
http://192.168.15.38:9200/[索引名]/[类型]/_search/
参数:
{
"query": {
"match": {
"[配置的字段]": "[匹配的值]"
}
}
}
例如
匹配地址带有山东的数据
注意问题:假如匹配"山"是匹配不到的,因为默认分词器把“山东”分为一个词,而不是"山"
http://192.168.15.38:9200/film/dongzuo/_search/
{
"query": {
"match": {
"address": "山东"
}
}
}
6.查询结果高亮显示 请求方式:POST
http://192.168.15.38:9200/[索引名]/[类型]/_search/
参数:
{
"highlight": {
"fields": {
"[高亮显示的字段]": {}
}
}
}
例如:
标题title高亮显示
注:高亮显示的只能是在查询中的字段
http://192.168.15.38:9200/film/dongzuo/_search/
{
"query": {
"match": {
"title": "战狼2"
}
},
"highlight": {
"fields": {
"title": {}
}
}
}
7.多条件组合查询
首先了解bool过滤器: 主要有三部分:
{
"bool" : {
"must" : [],
"should" : [],
"must_not" : [],
}
}
must:所有语句必须匹配 和and等价
must_not:所有语句必须不能匹配 和not等价
should:至少一个匹配 和or等价
(1)单个条件模糊匹配
{
"query": {
"bool": {
"must": {
"match": {
"name": "李四"
}
}
}
},
"_source": {
"include": [
"name",
"age",
"address"
]
},
"highlight": {
"fields": {
"name": {}
}
}
}
(2)多个条件匹配
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "李四"
}
},
{
"match": {
"address": "山东"
}
}
]
}
},
"_source": {
"include": [
"name",
"age",
"address"
]
},
"highlight": {
"fields": {
"name": {}
}
}
}
(3)must与must_not组合使用
查询地址含有山东,姓名不含有张三的用户
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "山东"
}
}
],
"must_not": {
"match": {
"name": "张三"
}
}
}
},
"_source": {
"include": [
"name",
"age",
"address"
]
},
"highlight": {
"fields": {
"name": {}
}
}
}
(4)使用should查询
should查询相当于sql里面的or条件,在ES里面还有个功能就是提高_score参数,是的匹配更精确
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "山东"
}
}
],
"should": [
{
"match": {
"name": "张三"
}
},
{
"range": {
"age": {
"gte": 21
}
}
}
]
}
},
"_source": {
"include": [
"name",
"age",
"address"
]
},
"highlight": {
"fields": {
"name": {}
}
}
}
(5)filter过滤 fileter作用是过滤符合条件的查询
例如:过滤掉年龄小于21的用户
gt: 大于
gte:大于等于
lt:小于
lte:小于等于
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "山东"
}
}
],
"filter": {
"range": {
"age": {
"gte": 21
}
}
}
}
},
"_source": {
"include": [
"name",
"age",
"address"
]
},
"highlight": {
"fields": {
"name": {}
}
}
}