赞
踩
PUT 索引库名
GET 索引库名
DELETE 索引库名
PUT 索引库名/_mapping/映设类型名称
{
"properties": {
"字段名": {
"type": "类型",
"index": true,
"store": true,
"analyzer": "分词器"
}
}
}
_doc
type:类型。这个类型有很多种。可以是text、long、short、date、integer、object等
index:是否进行索引,默认是true,如果是true,简单来说就是你可以通过索引来进行查找,但是如果配置成false,你就不可以使用索引查询
store:是否进行存储,默认值为false,是否进行额外的存储的意思
analyzer:使用的分词器是什么
我们可以看到官方文档上的内容
其中String类型又分为俩种;
一种是text类型,一种是keyWord类型
查看某个索引库中的所有类型的映射
GET /索引库名/_mapping
如果要查看某个类型映射,可以再路径后面跟上类型名称
GET /索引库名/_mapping/映射名
POST/索引库名/类型/id值
{
"映设字段名":"内容"
}
PUT/索引库名/类型/id值
{
"映设字段名":"内容"
}
我们可以看到添加和修改的操作代码是一样的,那我们如区分什么是添加,什么是修改
如果是修改,提示就会出这样的
这是添加的
我们可以看到version这里的变化,如果是添加的话,这个版本就是1,如果是修改的话,版本就会依次叠加,并且result的提示也是不一样的
GET/索引库名/类型/id值
DELETE/索引库名/类型/id值
我们之前添加的数据都是已经定义过的,那如果添加没有定义过的会不会成功呢
事实上Elasticsearch非常智能,不需要给索引库设置任何mapping映射,它也可以根据输入的数据来判断类型,动态添加数据映射。
但是这里呢,有一个小问题,如果是String类型的,他无法判断你是text还是keyWord,就会创建一个text和text的子映射keyWord,这不是我们需要看到的结果,这里就引出了动态映射模板
"dynamic_templates": [
{
"my_template_name": {
... match conditions ...
"mapping": { ... }
}
},
...
]
- my_template_name:自定义模板名称
- match conditions:匹配条件,凡是符合条件的未定义字段,都会按照这个规则来映射
- mapping:映射规则,匹配成功后的映射规则
GET itheima/_search
{
"query": {
"match_all": {}
}
}
GET itheima/_search
{
"query": {
"match": {
"title": "小米电视"
}
}
}
GET itheima/_search
{
"query": {
"term": {
"price": 3899
}
}
}
bool 把各种其它查询通过 must (与)、 must_not (非)、 should (或)的方式进行组合查询
GET itheima/_search { "query": { "bool": { "must": { "match": { "title": "小米" } }, "must_not": { "match": { "title": "电视" } } } } }
操作符 | 说明 |
---|---|
gte | 大于等于 |
gt | 大于 |
lte less than and euqal | 小于等于 |
lt | 小于 |
GET itheima/_doc/_search
{
"query": {
"range": {
"price": {
"gte": 1000,
"lt": 2800
}
}
}
}
GET itheima/_doc/_search
{
"query": {
"fuzzy": {
"title": "电视3"
}
}
}
GET /索引库名称/_search
{
"query": {
“match_all": {}
},
"_source": {
“includes”:[“显示域名称1","显示域名称12"]
“excludes”: [“要排除的域名称"]
}
}
举例:
GET /索引库名称/_search
{
"query":{
"bool":{
"must":{ "match": { "title": "小米手机" }},
"filter":{
"range":{"price":{"gt":2000.00,"lt":3800.00}}
}
}
}
}
GET /索引库名称/_search
{
"query":{
"match_all": {}
},
"sort": [
{ “域名称1": { "order": "desc" }},
{ “域名称2 ": { "order": "desc" }}
]
}
举例:
GET /heima/_search
{
"query": {
"match_all": {}
},
“from”: 3, #起始位置
“size”: 3 #每页显示条数
}
其实不管我们在任何浏览器对关键字进行搜索的时候,我们都会发现,搜索的结果中搜索的关键字变成了高亮显示,我们可以在任意浏览器中查看源码会发现都只是在字段前后加上一个显示的效果而已,那我们使用kibana操作Elasticsearch的时候也是可以实现的。
例如:
GET /索引库名称/_search
{
"query": {
"match": {
“title”: “手机“ #查询的关键字
}
},
"highlight": {
“pre_tags”: “<em>”, #CSS的标签
"post_tags": "</em>", #CSS的标签
"fields": {
“title”: {} # 要高亮的域
}
}
}
为了方便我们对数据的统计和分析,我们可以使用某种方式对数据进行分组,每一组数据在Elasticsearch中都称为一个桶。
GET /car/_search
{
"size": 0,
"aggs": {
"popular_colors": {
"terms": {
"field": "color"
}
}
}
}
size: 查询条数,这里设置为0,因为我们不关心搜索到的数据,只关心聚合结果,提高效率
aggs:声明这是一个聚合查询,是aggregations的缩写
popular_colors:给这次聚合起一个名字,可任意指定。
terms:聚合的类型,这里选择terms,是根据词条内容(这里是颜色)划分
field:划分桶时依赖的字段
分组完成以后,我们都会对组中的数据进行运算。比如求平均值等等,这就是桶内度量。
GET /car/_search { "size": 0, "aggs": { "popular_colors": { "terms": { "field": "color" }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } } }
aggs:我们在上一个aggs(popular_colors)中添加新的aggs。可见度量也是一个聚合
avg_price:聚合的名称
avg:度量的类型,这里是求平均值
field:度量运算的字段
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。