美文网首页
ES 同义词处理方案

ES 同义词处理方案

作者: 郭彦超 | 来源:发表于2020-08-11 11:45 被阅读0次

同义词也叫近义词或相近词,用来处理用户不同搜索关键词但表述相同的场景;如当用户输入“邀请函免费“与“邀请函免费版”,其实都在找免费的邀请函,那么在不考虑个性化的前提下返回的商品结果集不应该是不一样的。

那么基于以上假设,我们可尝试通过ES自带同义词功能来解决。

创建同义词文件

第一步在elasticsearch的config目录下创建analysis文件夹创建自己的同义词文件synonym.txt并编辑synonym.txt文件(切记文档编码格式一定要是UTF-8,),内容比如如下:

双十一,双11=>购物节
中秋,中秋节=>中秋节
免费,免费版
iPhone,苹果手机 
耐克,Nike

一行一个同义词,其中 AA,BB=>CC 这种写法会将AA与BB都映射到CC,然后只对CC进行索引;而 AA,BB 这种当文档中存在AA时,不仅仅会索引AA还会索引BB;这里需要注意的是如果文件中一个词存在于多行,那么对应的近义词会累计,如:

小米,小米手机
小米,小米电脑

此时“小米”对应的近义词是“小米手机”,“小米电脑”,但如果是输入“小米手机”,那么近义词只有“小米”.

加载词库

需要重启ES进行词库加载

创建索引库

创建索引库时使用自定义分词器

{
    "settings": {
        "index" : {
            "analysis" : {
                "analyzer" : {
                    "my_analyzer" : {
                        "tokenizer" : "ik_max_word",
                        "filter" : ["my_synonym"]
                    }
                },
                "filter" : {
                    "my_synonym" : {
                        "type" : "synonym",
                        "synonyms_path" : "analysis/synonym.txt"
                    }
                }
            }
        }
    },
    "mappings": {
        
            "properties": {
                "title": {
                    "type": "text",
                    "analyzer": "my_analyzer"
                }
            }
      
    }
}

其中synonyms_path指定第一步配置的索引文件路径。

验证效果

{  "analyzer": "my_analyzer",  "text": ["iphone"]}
{
    "tokens": [{
        "token": "iphone",
        "start_offset": 0,
        "end_offset": 6,
        "type": "ENGLISH",
        "position": 0
    }, {
        "token": "苹果",
        "start_offset": 0,
        "end_offset": 6,
        "type": "SYNONYM",
        "position": 0
    }, {
        "token": "手机",
        "start_offset": 0,
        "end_offset": 6,
        "type": "SYNONYM",
        "position": 1
    }]
}

通过结果可以看出,输入词“iPhone”经过filter被映射到同义词文件中配置的“iPhone”和“苹果手机”,之后经过token analyzer处理后“苹果手机”又被拆分成“苹果”和“手机”。

相关文章

  • ES 同义词处理方案

    同义词也叫近义词或相近词,用来处理用户不同搜索关键词但表述相同的场景;如当用户输入“邀请函免费“与“邀请函免费版”...

  • Learn async/await

    JavaScript的异步处理方案由最初让人头疼的callback hell,到ES6加入了抽象异步处理对象的Pr...

  • 同义词替换

    基于同义词表,进行同义词替换 同义词词表如下,词与词之间用 \t 隔开: 代码如下: 输出: 并行处理还有点小问题...

  • JavaScript 异步操作进阶第三步:async 函数

    一、含义 在早期,ES6 最初的异步处理方案引入 Promise 对象,后经过升级成更好的异步编程解决方案:Gen...

  • es近义词(同义词)配置

    分析器配置: 在es的config目录创建 analysis/synonym.txt 文件即可

  • #自然语言处理# Lecture 1: Word2Vec

    1. 如何表示一个词语的意义 通常解决方案: WordNet (包含同义词集和超名称列表的同义词词典) 2. Wo...

  • ElasticSearch6 IK 同义词 配置

    网上大多数都是 es5 的配置方法, 关于 es6 的同义词配置 断断续续研究了好几天,今天本地 服务器上,终于配...

  • 大数据入门学习

    常用处理方案 对于大量数据的处理方案:大量数据处理。 对于高并发的处理方案:高并发处理。 ============...

  • 解决node对es6-import语法支持

    方案一:将文件后缀改为 .mjs 方案二:使用babel插件将es6转码为es5 需要加入'.babelrc'文件...

  • Question丨async/await 一定要加 try/ca

    ES7的 async/await 组合相信现在大家已经用得炉火纯青了,是一个异步请求目前较优的处理的方案。为了保证...

网友评论

      本文标题:ES 同义词处理方案

      本文链接:https://www.haomeiwen.com/subject/wgsedktx.html