ElasticsearchBES

    动态同义词插件

    背景

    词干提取是通过简化他们的词根形式来扩大搜索的范围,同义词通过相关的观念和概念来扩大搜索范围。 也许没有文档匹配查询 “英国女王“ ,但是包含 “英国君主” 的文档可能会被认为是很好的匹配。用户搜索 “美国” 并且期望找到包含 美利坚合众国 、 美国 、 美洲 、或者 USA 的文档。

    百度智能云Elasticsearch提供的动态同义词插件可以满足上述需求,同义词词典主要包括一个可选的内置的汉语同义词词典和用户提供的远端可更新的同义词词库,用户需要在创建索引的时候对需要进行同义展开的字段进行设定。

    使用方式

    创建索引并自定义分词器

     PUT synonym_test
    {
       "settings": {
          "index": {
             "number_of_replicas": 0,
             "number_of_shards": 1,
             "analysis": {
                "analyzer": {
                   "sy": {
                      "type": "custom",
                      "tokenizer": "bd-nlp-phrase",
                      "filter": [
                         "remote_synonym",
                         "lowercase"
                      ]
                   }
                },
                "filter": {
                   "remote_synonym": {
                      "type": "bd_synonym",
                      "expand": true,
                      "synonyms_path": "http://{ip}:{port}/synonym.txt",
                      "reload_interval": 30
                   }
                }
             }
          }
       }
    }

    参数说明:

    参数 说明
    type 固定为bd_synonym
    expand 对同义词词进行取代替换或展开, 默认为false即展开
    synonyms_path 远程词典的地址, 需要用户配置并且保证ES集群可以访问
    reload_interval 检测远程词典变化的时间间隔, 默认为30s
    need_tokenize 是否对同义词词典中的单个词进行分词, 默认为false并采用keyword tokenizer
    local 是否启用内置的本地同义词库,默认为true,我们提供了一个基础的中文同义词词典但并不保证效果
    format 支持solrwordnet类型的同义词词典,建议设置值采用默认值solr, 设定其他值按solr处理
    analysis_mode 同义语义作用的分析阶段,allindexsearch, 默认为all
    lenient 同义词词典中如果有行解析错误是否跳过, 默认为true

    词典说明

    同义词最简单的表达形式是用逗号分隔:

    "jump,leap,hop"

    如果遇到这些词项中的任何一项,则将其替换为所有列出的同义词

    原始词项  →   取代
    ────────────────────────────────
    jump            → (jump,leap,hop)
    leap            → (jump,leap,hop)
    hop             → (jump,leap,hop)

    或者, 使用 => 语法,可以指定一个词项列表(在左边),和一个或多个替换(右边)的列表:

    "usa,united states,united states of america => usa"
    "gb,gb,great britain => britain,england,scotland,wales"
    原始词项  →   取代
    ────────────────────────────────
    u s a           → (usa)
    united states   → (usa)
    great britain   → (britain,england,scotland,wales)

    如果多个规则指定同一个同义词,它们将被合并在一起,且顺序无关,否则使用最长匹配

    一个简单的中文同义词词典样例:

    肯德基,KFC,开封菜
    America, Unitied States, 美国, 美利坚合众国
    中国,china,中华人民共和国
    elasticsearch,ES
    公有云,云计算
    AI,人工智能,智能
    机器人,robot,机械机构

    说明:

    • 每行是一个同义词组
    • 用英文逗号进行分割

    _analyze API测试

    POST test/_analyze
    {
        "text": "KFC",
        "analyzer": "sy"
    }

    分词结果:

    {
       "tokens": [
          {
             "token": "kfc",
             "start_offset": 0,
             "end_offset": 3,
             "type": "WORD",
             "position": 0
          },
          {
             "token": "金拱门",
             "start_offset": 0,
             "end_offset": 3,
             "type": "SYNONYM",
             "position": 0
          },
          {
             "token": "开封菜",
             "start_offset": 0,
             "end_offset": 3,
             "type": "SYNONYM",
             "position": 0
          }
       ]
    }

    注意

    创建索引时会以同步的方式请求远端词典,所以创建索引的时间可能会比较长。

    上一篇
    ingest attachment插件
    下一篇
    上传与安装自定义插件