接入中文分词:
地址:github地址
集群的所有节点都要安装
- 创建索引
PUT /test
{
"settings" : {
"number_of_shards" : 1,
"number_of_replicas" : 1
}
number_of_shards
:分片数量
number_of_replicas
:副本数量
更新其replicas状态,但是不能更新shards状态
PUT /test/_settings
{
"number_of_replicas" : 0
}
- 指定id创建索引
PUT /test/_doc/1
{
"name":"赵云",
"sname":"赵子龙",
"ename":"zhaoxiaoyun",
"age":23
}
#或者(可防止重复创建)
POST /test/_doc/1/_create
{
"name":"赵云",
"sname":"赵子龙",
"ename":"zhaoxiaoyun",
"age":23
}
_doc
为type字段,可自定义命名,type字段在7.x版本已废弃
- 指定id修改索引
POST /test/_doc/1/_update
{
"doc":{
"name":"赵云1"
}
}
- 删除指定id索引
DELETE /test/_doc/1
- 删除索引
DELETE /test
- 搜索全部
GET /test/_search
- 根据id搜索
GET /test/_doc/1
- 结构化创建索引
PUT /test
{
"settings": {
"number_of_replicas": 1,
"number_of_shards": 1
},
"mappings": {
"_doc":{
"properties": {
"name":{"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},
"sname":{"type": "text","analyzer": "ik_smart"},
"ename":{"type": "text","analyzer": "english"},
"age":{"type": "integer"}
}
}
}
}
analyzer
指定分词器,stander
:es中文默认分词器,会将每个字都分开;ik_max_word
:ik中文分词器,根据ik的配置库(结尾有详细说明)进行分词;ik_smart
:ik智能分词器,使用的是贪心算法;english
:英文分词器,会提取词干和去掉停用词
- 查询所有
GET /test/_search
{
"query":{
"match_all": {}
}
}
- 分页查询
GET /test/_search
{
"query":{
"match_all": {}
},
"from":0,
"size":1
}
- 条件查询
GET /test/_search
{
"query":{
"match": {"name":"赵云"}
}
}
- 排序
GET /test/_search
{
"query":{
"match": {"name":"赵云"}
},
"sort":[
{"age":{"order":"desc"}}
]
}
- 聚合
GET /test/_search
{
"query":{
"match": {"name":"赵云"}
},
"sort":[
{"age":{"order":"desc"}}
],
"aggs":{
"group_by_age":{
"terms":{
"field":"age"
}
}
}
}
group_by_age
为自定义名称
- 分词
GET /test/_analyze
{
"field": "sname",
"text": "武汉市长江大桥"
}
分词的妙用:
既然有了ik分词,是不是就意味着stander分词没用了?其实并不是这样的哦
#托底,搜江大桥没有,在建了ik的字段,在建一个一样的stander的字段。如果ik搜不到 就可以搜这一个stander分词的,这样保证会又结果。但是慎用,因为占空间,有些特殊的系统可以使用。
#其实ik也还有一个解决的办法 叫砍词:江大桥 我可以砍掉一个词,我砍掉江 就出来了。砍词的策略可以自定义
比如:江大桥这个词,在电商中,我们系统假设有大桥这个品牌。 那我们可以一个个的是去试一下,比如可以用字符串匹配找出大桥。也有很多系统很粗暴,直接从第一个字开始砍,一直砍到有为止。
#既有英文又有中文的 直接选ik
#如果不用砍词那就要去词库加词,比如加入江大桥就可以了。具体路径是在es的:
elasticsearch/config/analysis-ik/main.dic(使用install命令安装ik)
elasticsearch/plugins/ik/config/main.dic(使用解压安装ik)
注意集群的话那就要所有的es都需要加的哦