首先,在elasticsearch是可以自定义分词规则的。操作流程是设置maping时同时设置"settings"。
以下通过英文逗号","进行分词为例子,讲解具体操作流程。所有操作都在kibana中演示。
PUT /test
{
"settings": {
"analysis": {
"analyzer": {
"comma": {
"type": "pattern",
"pattern": ","
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "keyword"
},
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"kw":{
"type": "text",
"analyzer": "comma",
"search_analyzer": "comma"
}
}
}
}
讲解:关键在于"settings"属性,定义了以英文逗号分割作为分词规则并命名为”comma“。
在"mappings"里 ”kw“字段使用了该分词规则。
POST /test/_doc/1
{
"title":"四川大学华西第二医院",
"content":"四川大学华西第二医院现有华西院区、锦江院区两个院区,其中华西院区位于四川省成都市武侯区人民南路三段二十号,始建于1896年,建筑面积5.41万平方米",
"kw":"华西附二,四川大学华西第二医院,华西第二医院,华西二院,川大华西二院,华西第二"
}
POST /test/_doc/2
{
"title":"南方医科大学珠江医院",
"content":"南方医科大学珠江医院位于广东省广州市海珠区工业大道中253号,始建于1947年,占地面积5万平方米,建筑面积17万平方米,是一所集医疗、教学、科研为一",
"kw":"南方医科大学珠江医院,182,珠江医院"
}
GET /test/_search
{
"query": {
"match": {
"kw": "182"
}
}
}