Elasticsearch之filed详细介绍

        看到这篇文章的小伙伴应该是有了解过Elasticsearch的一些内容,如果有还不知道Elasticsearch是什么的小伙伴可以去看看博主的“浅入Elasticsearch(全文检索服务器)”这篇文章:浅入Elasticsearch(全文检索服务器)_一只小阿辉的博客-优快云博客

言归正传,本票文章主要说一下filed

目录

一、field的属性介绍

1.1.type:

1.2.analyzer:

1.3.index:

1.4.source:

二、常用field类型

2.1.text文本字段

1、创建新映射:

2、插入文档:

3、查询测试:

 4、ik分词器上的效果:分词 中是没有pic(图片)的

​编辑

5、head客户端中的效果:展示的列表中是展示pic域的,但是没有description这个域(原因是把这个域排除了,不展示)

2.2.keyword关键字字段

1、更改映射:

2、插入文档:

3、根据name查询文档:

2.3.date日期类型

1、设置允许date字段存储年月日时分秒、年月日及毫秒三种格式。

2、插入文档:

2.4.Numeric类型

2、插入文档

7.3.field属性的设置标准

总结:

 1、field数据类型

    2、field的属性

    3、field属性的设置标注


上边章节安装了ik分词器,如何在索引和搜索时去使用ik分词器呢?如何指定field的类型?比如日期类型、数值类型等。

ES6.2核心的字段类型如下:

 

一、field的属性介绍

1.1.type:

通过type属性指定field的类型。

"name":{    
       "type":"text"
}

1.2.analyzer:

通过analyzer属性指定分词模式。

 "name": {
                  "type": "text",
                  "analyzer":"ik_max_word"
   }

        上边指定了analyzer是指在索引和搜索都使用ik_max_word,如果单独想定义搜索时使用的分词器则可以通过 search_analyzer属性。 对于ik分词器建议是索引时使用ik_max_word将搜索内容进行细粒度分词,搜索时使用ik_smart提高搜索精确性。

"name": {
                  "type": "text",
                  "analyzer":"ik_max_word",#生成索引目录时
                  "search_analyzer":"ik_smart"#检索时
 }

1.3.index:

通过index属性指定是否索引。 默认为index=true,即要进行索引,只有进行索引才可以从索引库搜索到。 但是也有一些内容不需要索引,比如:商品图片地址只被用来展示图片,进行搜索图片,此时可以将index设置 为false。 删除索引,重新创建映射,将pic的index设置为false,尝试根据pic去搜索,结果搜索不到数据

"pic": {
         "type":"text",           
       "index":false
}

1.4.source:

        如果某个字段内容非常多,业务里面只需要能对该字段进行搜索,比如:商品描述。查看文档内容会再次到mysql或者hbase中取数据,把大字段的内容存在Elasticsearch中只会增大索引,这一点文档数量越大结果越明显,如果一条文档节省几KB,放大到亿万级的量结果也是非常可观的。

如果只想存储某几个字段的原始值到Elasticsearch,可以通过incudes参数来设置,在mapping中的设置如下:

POST /java2202/course/_mapping
{
  "_source": {
    "includes":["description"]
  }
}

同样,可以通过excludes参数排除某些字段:

POST /java2202/course/_mapping
{
  "_source": {
    "excludes":["description"]
  }
}

二、常用field类型

2.1.text文本字段

例如:

1、创建新映射:

POST /java06/course/_mapping
{
  "_source": {
    "excludes":["description"]
  }  
  "properties": {   
       "name": {
           "type": "text",
           "analyzer":"ik_max_word",
           "search_analyzer":"ik_smart"
       },         
      "description": {
          "type": "text",
          "analyzer":"ik_max_word",
          "search_analyzer":"ik_smart"
      },
      "pic":{
          "type":"text",
          "index":false
      }
  }   
}

2、插入文档:

POST /java06/course/1
{
  "name":"python从入门到放弃",
  "description":"人生苦短,我用Python",
  "pic":"250.jpg"
}

3、查询测试:

GET /java06/course/_search?q=name:放弃
GET /java06/course/_search?q=description:人生
GET /java06/course/_search?q=pic:250.jpg

结果:name和description都支持全文检索,pic不可作为查询条件 

注意:这里是有的问题的:(GET /java06/course/_search?q=name:放弃)这个查询在Kibana客户端是查不出来的,因为查询条件是带中文的,需要这样子查:

 4、ik分词器上的效果:分词 中是没有pic(图片)的

5、head客户端中的效果:展示的列表中是展示pic域的,但是没有description这个域(原因是把这个域排除了,不展示)

 

2.2.keyword关键字字段

上边介绍的text文本字段在映射时要设置分词器,keyword字段为关键字字段,通常搜索keyword是按照整体搜索,所以创建keyword字段往索引目录写时是不进行分词的,比如:邮政编码、手机号码、身份证等。keyword字段通常用于过虑、排序、聚合等。

例如:

1、更改映射:

POST /java06/course/_mapping
{
     "properties": {
       "studymodel":{
          "type":"keyword"
       }
     }
}

2、插入文档:

PUT /java06/course/2
{
 "name": "java编程基础",
 "description": "java语言是世界第一编程语言",
 "pic":"250.jpg",
 "studymodel": "2010年01月"
}

3、根据name查询文档:

GET /java06/course/_search?q=studymodel:2010年01月

studymodel是keyword类型,所以查询方式是精确查询。

2.3.date日期类型

日期类型不用设置分词器,通常日期类型的字段用于排序。 1)format 通过format设置日期格式,多个格式使用双竖线||分隔, 每个格式都会被依次尝试, 直到找到匹配的

例如:

1、设置允许date字段存储年月日时分秒、年月日及毫秒三种格式。

POST /java06/course/_mapping
{
    "properties": {
       "timestamp": {
         "type":   "date",
         "format": "yyyy-MM-dd"
       }
     }
}

2、插入文档:

PUT /java06/course/3
{
"name": "spring开发基础",
"description": "spring 在java领域非常流行,java程序员都在用。",
"studymodel": "201001",
 "pic":"250.jpg",
 "timestamp":"2018-07-04 18:28:58"
}

2.4.Numeric类型

es中的数字类型经过分词(特殊)后支持排序和区间搜索

例如:

1、更新已有映射:

POST /java06/course/_mapping
{
    "properties": {
    "price": {
        "type": "float"
     }
  }
}

2、插入文档

PUT /java06/course/3
{
 "name": "spring开发基础",
 "description": "spring 在java领域非常流行,java程序员都在用。",
 "studymodel": "2022年08月01",
 "pic":"250.jpg",
 "price":38.6
}

7.3.field属性的设置标准

属性标准
type是否有意义
index是否搜索
source是否展示

总结:

 1、field数据类型

        文本:text、keyword(往索引目录写不进行分词)
        数字:integer、long、float、double

    2、field的属性

         type:数据类型,如:text、long
         analyzer:往索引目录写或搜索时的分词模式,如:analyzer=ik_max_word,analyzer=ik_smart
         index:是否往索引目录写,如:true、false
         _source:document中是否存储,如:includes,excludes

    3、field属性的设置标注

          属性                     标准
          type                   分词是否有意义
          index                  是否搜索
          _source                是否展示

下一章内容会说一下整合Spring Boot整合ElasticSearch

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值