欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES同义词扩展

程序员文章站 2023-12-22 08:01:39
...

同义词

雨伞,伞,雨伞
手表,表,手表
马靴,靴,马靴
骑士靴,靴,骑士靴
太阳伞,伞,太阳伞
皮夹,包,皮包,皮夹
皮箱,箱,箱包,皮箱
拉杆箱,箱,箱包,拉杆箱
牛仔短裤,牛仔裤,牛仔短裤
牛仔长裤,牛仔裤,牛仔长裤
背包,包,背包
手包,包,手包
挎包,包,挎包
钱包,包,钱包
纯银,银,纯银
黑色,黑,黑色
白色,白,白色
灰色,灰,灰色
粉色,粉,粉色
红色,红,红色
黄色,黄,黄色
蓝色,蓝,蓝色
棕色,棕,棕色
紫色,紫
米色,米
裸色,肉色
花,碎花,花色
青色,绿,绿色
薰衣草色,紫色,紫
条纹,横条,竖条,花纹
橙色,橘色,桔色,桔,橘,橙
袜子,袜
裤子,裤
被子,被
鞋子,鞋
裙子,裙
裤子,裤
分裤,短裤
衣服,服装
坎肩,马甲
衬裤,秋裤
腰带,皮带
围脖,围巾
墩布,拖把
拢子,梳子
西裤,正装裤
电褥子,电热毯
裤衩,短裤,内裤
皮袄,皮革,皮衣
电话,电话机,座机
布衫,衬衫,衬衣,衬
乔其纱,雪纺,雪纺衫
外衣,外套,外褂,褂子
男袜,男士袜,男士袜子
女袜,女士袜,女士袜子
洗脚盆,足疗机,足浴盆
T-shirt,T恤,Tshirt,T
商务装,正装,西装,西服
晾衣架,衣服架,衣架,晒衣架
挂表,钟,大表,表,闹钟,钟表
泳装,泳衣
披风,披肩
文胸,胸罩
地垫,地毯
四件套,4件套
衬衣,衬衫,衬
男,男士,女式
女,女士,女式
情侣款,情侣装
保护壳,手机套
棉被,铺盖,被子
大号,大尺码,大码
钱夹子,钱包,钱夹
墨镜,蛤蟆镜,太阳镜
太阳镜,眼镜,太阳镜
儿童,婴儿,幼儿,婴幼儿,初生儿

上传同义词文件

  1. 上传同义词前需确保集群处于正常状态,该操作会触发集群滚动重启,在重启过程中后台会进行同义词词典的下发,生效时长与集群规模、数据量及负载情况等有关系,建议在业务低峰期操作。
  2. 如果集群索引存在副本分片且集群负载处于正常水平(CPU使用率在60%左右,堆内存使用率在50%左右,load_1m低于CPU核数),一般情况下,在集群变更过程中可持续对外提供服务。
  3. 如果集群负载过高且索引没有副本,同时业务中存在大量的写入或查询等场景,在集群变更过程中,业务可能会出现偶发的访问超时现象。建议在客户端访问机制中配置重试机制,以减小对业务的影响。
  4. 假设现存索引index-aliyun使用了aliyun.txt同义词文件,当aliyun.txt文件内容变更并重新上传后,现存索引不会动态加载更新后的同义词词典。请在同义词词典内容发生变化后进行索引重建操作,否则可能会造成只有新增数据使用新词典的情况。
  5. 同义词文件要求每行只有一个同义词表达式(表达式支持Solr规则和WordNet规则),保存为UTF-8编码的TXT文件,示例如下。

西红柿,番茄 =>西红柿,番茄
社保,公积金 =>社保,公积金

  1. 如果停用词中包含同义词文件中指定的词,上传同义词文件或进行其他操作时,主日志中会出现错误信息。
  2. 登录阿里云Elasticsearch控制台。
  3. 在左侧导航栏,单击Elasticsearch实例。
  4. 在顶部菜单栏处,选择资源组和地域,然后在Elasticsearch实例中单击目标实例ID。
  5. 在左侧导航栏,单击ES集群配置。
  6. 在基础配置区域,单击同义词配置右侧的上传。
  7. 在同义词配置页面,选择上传同义词文件的方式,并按照以下说明上传同义词文件。

同义词配置规则

GoodsDevelopConfigurator文件配置

protected $settings = [
    "analysis" => [
        "filter"   => [
            "my_synonym_filter" => [
                "type"          => "synonym",               // 同义词
                "synonyms_path" => "analysis/sysnonyms.txt", // 同义词路径
            ]
        ],
        "analyzer" => [
            "ik_syno"     => [
                'type'      => 'custom',             // 自定义
                'tokenizer' => "ik_smart",           // 分词器
                "filter"    => ["my_synonym_filter"] // 过滤器
            ],
            "ik_syno_max" => [
                "type"      => "custom",
                "tokenizer" => "ik_max_word",
                "filter"    => ["my_synonym_filter"]
            ]
        ]
    ]
];

使用同义词

protected $mapping = [
    'properties' => [
        'name'             => ['type' => 'text', 'analyzer' => 'ik_syno_max', 'search_analyzer' => 'ik_syno'],
        'category_name'    => ['type' => 'text', 'analyzer' => 'ik_syno_max', 'search_analyzer' => 'ik_syno'],
        'share_intro'      => ['type' => 'text', 'analyzer' => 'ik_syno_max', 'search_analyzer' => 'ik_syno'],
        'sell_point'       => ['type' => 'text', 'analyzer' => 'ik_syno_max', 'search_analyzer' => 'ik_syno'],
        'tags'             => ['type' => 'text', 'analyzer' => 'ik_syno_max', 'search_analyzer' => 'ik_syno'],
        'reason'           => ['type' => 'text', 'analyzer' => 'ik_syno_max', 'search_analyzer' => 'ik_syno'],
        'cate_tags'        => ['type' => 'text', 'analyzer' => 'ik_syno_max', 'search_analyzer' => 'ik_syno'],
        'title_tags'       => ['type' => 'text', 'analyzer' => 'ik_syno_max', 'search_analyzer' => 'ik_syno'],
    ],
]

注意:自定义分词器只会对新的索引生效,想要应用在旧索引上就要全量更新。

上一篇:

下一篇: