Elasticsearch映射关系之给索引数据添加映射关系

2023-06-01 00:00:00 索引 关系 映射

1、我们先创建一个user的索引

PUT 方式请求:
http://127.0.0.1:9200/user

2、创建成功后,我们再给 user 索引建立一个映射关系,成功后会返回 true

PUT 方式请求:
http://127.0.0.1:9200/user/_mapping
{
   "properties" : {
       "name" : {
       "type" : "text",
       "index" : true
       },
   "sex" : {
       "type" : "keyword",
       "index" : true
       },
   "mobile" : {
       "type" : "keyword",
       "index" : false
       }
   }
}


3、此时可以看到user索引和映射关系已经创建完成了


4、接下来我们就可以给user索引创建文档数据了

PUT 方式请求:
http://127.0.0.1:9200/user/_create/1001
{
   "name" : "张三",
   "sex" : "男性",
   "mobile" : 13888888888
}


5、查询user索引文档数据中有没有name包含“三”这个字的数据

GET 方式请求:
http://127.0.0.1:9200/user/_search
{
   "query" : {
       "match" : {
       "name" : "三"
       }
   }
}

可以看到,我们把刚刚添加进去的数据查询出来了,

我们只输入了一个“三”字就可以把数据查询出来,type = text 时候说明有分词的功能


6、我们继续查询,这次根据sex性别这个字段进行查询

{
   "query" : {
       "match" : {
       "sex" : "男"
       }
   }
}

可以看到,我们并没有查询到数据。 

当我们换成“男性”时,看到可以查询出来,

所以说 type = keyword 时,说明这是关键字,没有分词查询的功能


7、我们继续查询最后一个字段 mobile 手机号

我们可以看到手机号是跟创建时的数据是一致的

{
   "query" : {
       "match" : {
           "mobile" : 13888888888
       }
   }
}

但是执行查询时,直接提示 

failed to create query: Cannot search on field [mobile] since it is not indexed

创建查询失败:

无法在字段[mobile]上搜索,因为它没有被索引,所有,如果 index = false 时,该字段是不能被查询的

相关文章