配置同义词
所有文档

          Elasticsearch BES

          配置同义词


          百度智能云Elasticsearch支持上传自定义的同义词文件。此外,百度智能云Elasticsearch也支持动态同义词文件更新,见动态同义词

          上传方式

          1. 登录百度智能云Elasticsearch控制台,并点击集群名称,进入集群详情界面。
          2. 在左侧导航栏,单击配置修改

          image.png

          1. 点击“选择文件”,在弹出的页面选择需要上传的同义词文件,并“确认上传”。
          2. 在词典列表里可以看见相应文件,即完成同义词词典上传。

          注意事项

          • 同义词文件需要为utf-8编码,扩展名为txt
          • 要求每行一个同义词表达式(表达式支持 Solr 规则WordNet 规则),例如:

            肯德基,KFC => 肯德基
            elasticsearch,ES
          • 新上传/新变更的同义词文件对旧索引不生效,只对新建索引生效。
          • 若旧索引需要使用新上传的同义词文件,需要重建索引(reindex);已经被使用的同义词文件如果发生变更,需reopen索引(先将索引close,随后open索引),重新载入新的同义词配置。(但旧数据依旧没有使用新的同义词配置,需要reindex)
          • 同义词文件单个文件最大为10M,上传文件总数最多为10个。

          使用方式

          上传同义词文件后,用户可以创建索引,验证同义词配置,并可以写入测试数据进行搜索测试。创建索引时需要配置settingsmapping,并且需要在settings中配置"synonyms_path": "analysis/{your_dict_name}.txt"

          具体使用方式如下:

          上传文件

          在百度智能云Elasticsearch控制台,上传文件test_synonym.txt,文件内容为:

          肯德基,KFC => 肯德基

          创建索引

          PUT /test
          {
            "settings": {
              "index": {
                "analysis": {
                  "analyzer": {
                    "my_analyzer": {
                      "type": "custom",
                      "tokenizer": "ik_smart",
                      "filter": ["my_synonym"]
                    }
                  },
                  "filter": {
                    "my_synonym": {
                      "type": "synonym",
                      "synonyms_path": "analysis/test_synonym.txt"
                    }
                  }
                }
              }
            },
            "mappings": {
              "properties": {
                "title": {
                  "type": "text",
                  "analyzer": "my_analyzer",
                  "search_analyzer": "my_analyzer"
                }
              }
            }
          }

          验证同义词配置

          GET test/_analyze
          {
            "analyzer": "my_analyzer",
            "text": "KFC"
          }

          结果为:

          {
             "tokens": [
                {
                   "token": "肯德基",
                   "start_offset": 0,
                   "end_offset": 3,
                   "type": "SYNONYM",
                   "position": 0
                }
             ]
          }

          写入数据测试

          写入数据如下:

          POST test/_doc/1
          {
              "title":"我喜欢吃肯德基"
          }

          查询语句如下:

          GET /test/_doc/_search
          {
              "query":{
                "match": {
                  "title": "KFC"
                } 
              }
          }

          查询结果为:

          {
             "took": 20,
             "timed_out": false,
             "_shards": {
                "total": 1,
                "successful": 1,
                "skipped": 0,
                "failed": 0
             },
             "hits": {
                "total": {
                   "value": 1,
                   "relation": "eq"
                },
                "max_score": 0.2876821,
                "hits": [
                   {
                      "_index": "test",
                      "_type": "_doc",
                      "_id": "1",
                      "_score": 0.2876821,
                      "_source": {
                         "title": "我喜欢吃肯德基"
                      }
                   }
                ]
             }
          }

          详细信息见Elasticsearch官方配置同义词文档。

          上一篇
          基于BOS的快照与恢复
          下一篇
          插件管理