elasticsearch 如何使用自定义符号进行分词?

发布于 2021-08-23 11:23:38

原理

首先,在elasticsearch是可以自定义分词规则的。操作流程是设置maping时同时设置"settings"。
以下通过英文逗号","进行分词为例子,讲解具体操作流程。所有操作都在kibana中演示。

新建test索引

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"
    }
  }
}
0 条评论