1.IK分词器

(1)安装

使用IK分词器可以实现对中文分词的效果。
下载IK分词器:(Github地址:https://github.com/medcl/elasticsearch-analysis-ik)


下载zip,并将解压的文件拷贝到ES安装目录的plugins下的ik目录下(注意:ik的版本必须与elasticSearch一样)

然后重启elasticsearch:

测试分词效果:
发送:post localhost:9200/_analyze
{"text":"测试分词器,后边是测试内容:spring cloud实战","analyzer":"ik_max_word" }

(2)两种分词方式

ik分词器有两种分词模式:ik_max_word和ik_smart模式。
<1>ik_max_word
会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、
华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。
<2>ik_smart
会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。

(3)自定义词库

如果要让分词器支持一些专有词语,可以自定义词库。
iK分词器自带一个main.dic的文件,此文件为词库文件。

在上边的目录中新建一个my.dic文件(注意文件格式为utf-8(不要选择utf-8 BOM,使用editplus编辑文件,不要使用自带txt文件编辑器)
可以在其中自定义词汇:
比如定义:
配置文件中配置my.dic,

重启ES,测试分词效果:
发送:post localhost:9200/_analyze
{"text":"测试分词器,后边是测试内容:spring cloud实战","analyzer":"ik_max_word" }

2.映射

(1)映射维护方法

<1>查询所有索引的映射:
GET: http://localhost:9200/_mapping

<2>创建映射
post 请求:http://localhost:9200/lucky/doc/_mapping

<3>更新映射
映射创建成功可以添加新字段,已有字段不允许更新。
<4>删除映射
通过删除索引来删除映射。

(2)常用映射类型

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

<1>text文本字段

字符串包括text和keyword两种类型:

  • text

    1)analyzer
    通过analyzer属性指定分词器。
      下边指定name的字段类型为text,使用ik分词器的ik_max_word分词模式。

"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"
}

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

    3)store

    是否在source之外存储,每个文档索引后会在 ES中保存一份原始文档,存放在"_source"中。

      一般情况下不需要设置store属性为true,因为在_source中已经有一份原始文档了。

  测试:

  <1>创建新索引:

  

  <2>创建新映射:Post http://localhost:9200/xc_course/doc/_mapping

{
"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
},
"studymodel": {
"type": "text"
}
}
}

  

    <3>插入文档:
    http://localhost:9200/xc_course/doc/4028e58161bcf7f40161bcf8b77c0000

查询测试:
Get http://localhost:9200/xc_course/_search?q=name:开发
Get http://localhost:9200/xc_course/_search?q=description:开发
Get http://localhost:9200/xc_course/_search?q=pic:group1/M00/00/01/wKhlQFqO4MmAOP53AAAcwDwm6SU490.jpg
Get http://localhost:9200/xc_course/_search?q=studymodel:201002
通过测试发现:name和description都支持全文检索,pic不可作为查询条件。

  • keyword关键字字段

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

<2>date日期类型

日期类型不用设置分词器。
通常日期类型的字段用于排序。
1)format
通过format设置日期格式
例子:
下边的设置允许date字段存储年月日时分秒、年月日及毫秒三种格式。

{
"properties": {
"timestamp": {
"type": "date",
"format": "yyyy‐MM‐dd HH:mm:ss||yyyy‐MM‐dd"
}
}
}

<3>数值类型

下边是ES支持的数值类型

1、尽量选择范围小的类型,提高搜索效率
2、对于浮点数尽量用比例因子,比如一个价格字段,单位为元,我们将比例因子设置为100这在ES中会按 分 存
储,映射如下:

"price": {
"type": "scaled_float",
"scaling_factor": 100
},

由于比例因子为100,如果我们输入的价格是23.45则ES中会将23.45乘以100存储在ES中。
如果输入的价格是23.456,ES会将23.456乘以100再取一个接近原始值的数,得出2346。
使用比例因子的好处是整型比浮点型更易压缩,节省磁盘空间

最新文章

  1. 安装Axure7.0,完整教程,有验证码和汉化包
  2. LinuxMint 18 编译cm13.0 笔记
  3. Thinking in Java——笔记(8)
  4. 绕过/*,web.xml直接访问jsp
  5. Node-APN 开源推送服务
  6. [转]Angular, Backbone, or Ember: Which is Best for your Build?
  7. 开启Eclipse 智能感知代码功能
  8. maclean-【性能调优】Oracle AWR报告指标全解析 学习笔记
  9. 超级易使用的jquery视频背景插件Vide
  10. Idea高级用法
  11. 布隆过滤器(BoomFilter)
  12. python的with语句,超级强大
  13. [译] OpenStack Pike 版本中的 53 个新功能盘点
  14. 基本的maven的命令行命令
  15. Android项目中独立Git项目分库后的编译调试时Gradle的配置
  16. IP通信基础学习第四周(上)
  17. 卸载和删除wozhuan.exe
  18. org.apache.poi 读取数字问题
  19. tomcat停止和启动脚本
  20. python之面向对象的高级进阶

热门文章

  1. 获取apache ignite缓存中的数据行数少于实际行数
  2. 【转】Linux内存管理(最透彻的一篇)
  3. springboot常用方法手记
  4. Python3和HTMLTestRunner生成html测试报告
  5. DVWA的搭建
  6. python 文本全选
  7. python语言(七)面向对象、异常处理
  8. postMessage的使用
  9. Qt常用类——QFrame类与QWidge类
  10. 解决栏登 F~~~秋~~~之后只有火狐能上网的问题