ES入门研究
什么是ES
![](https://img.haomeiwen.com/i1330568/171d3de28eec9ac7.png)
ES拿来做什么用?
![](https://img.haomeiwen.com/i1330568/c7937816519715d8.png)
ES常用的映射类型
文本字段
文本字符串包括text和keyword两种类型:
1、text
1.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=true
,即要进行索引,只有进行索引才可以从索引库搜索到。
但是也有一些内容不需要索引,比如:商品图片地址只被用来展示图片,不进行搜索图片,此时可以将index
设置为false
。
删除索引,重新创建映射,将pic
的index
设置为false
,尝试根据pic
去搜索,结果搜索不到数据
"pic": {
"type": "text",
"index":false
}
3)store
是否在source之外存储,每个文档索引后会在 ES中保存一份原始文档,存放在"_source"中,一般情况下不需要设置store为true,因为在_source中已经有一份原始文档了
测试
删除course/doc
下的映射
创建新映射:Post http://localhost:9200/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"
}
}
}
插入文档http://localhost:9200/course/doc/4028e58161bcf7f40161bcf8b77c0000
{
"name":"Bootstrap开发框架",
"description":"Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包
含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的
精美界面效果。",
"pic":"group1/M00/00/01/wKhlQFqO4MmAOP53AAAcwDwm6SU490.jpg",
"studymodel":"201002"
}
查询测试:
Get http://localhost:9200/course/_search?q=name:开发
Get http://localhost:9200/course/_search?q=description:开发
Get http://localhost:9200/course/_search?
得到q=pic:group1/M00/00/01/wKhlQFqO4MmAOP53AAAcwDwm6SU490.jpg
Get http://localhost:9200/course/_search?q=studymodel:201002
通过测试发现:name
和description
都支持全文检索,pic
不可作为查询条件。
keyword关键字字段
上边介绍的TEXT文本字段在映射时要设置分词器,keyword
字段为关键字字段,通常搜索keyword
是按照整体搜索,所以创建keyword
字段的索引时是不进行分词的,比如:邮政编码、手机号码、身份证等。keyword
字段通常用于过虑、排序、聚合等。
测试
。。。