elasticsearch全局检索多分词器匹配

本文介绍了如何在Elasticsearch中实现全局检索,特别是在商品名称、品牌名称和类目名称中进行多分词器匹配,如standard、ik和not_analyzed。通过multi_field映射和multi_match查询,解决中文模糊查询的问题,确保含有关键字的文档能被正确检索到。
摘要由CSDN通过智能技术生成

在es全局检索的需求中,需要进行多个分词器同时匹配关键词,例如:

在商品名称、品牌名称和类目名称中匹配含有“西”关键字的查询结果,当一个字段匹配时即加入查询结果

用sql语句表达为:select  *  from  item where item_name like '%西%' or brand_name like '%西%' or c_name like '%西%'

其中item_name,brand_name,c_name分别商品名称、品牌名称和类目名称

这个简单的需求在es中却实现比较困难,原因是es在索引数据时会针对字段内容进行分词,下面列出es几种分词器的特性:

1)standard分词器

      es默认的分词器,对中文支持不友好,会将中文分成单字,这样在查询多个汉字时就匹配不到doc,所以针对中文字段可使用ik

2)ik分词器

      需要单独安装ik插件,有ik_smart和ik_max_word两种分词粒度,其中ik_max_word粒度更细,但如果ik识别不出的词,就不会分出

      导致上边的全局检索例子查询“西”时匹配不到数据

3)pinyin分词器

      需要安装插件,可支持拼音全拼、简拼和首字母查询

鉴于以上分词器的特性,在全局检索时可能需要使用几种分词器同时工作,那这种需求该如何来处理呢?答案是使用multi_field

以下为multi_field的mapping:

{
        "item" : {
            "properties" : {
                "item_name" : {
                    "type" : "multi_field",
                    "fields" : {
                        "item_name_ik" : {"type" : "string", "analyzer" :"ik"},
                        "item_name_not" : {"type" : "string", "index" : "not_analyzed"},
                        "item_name_standard" : {"type" : "string"}
                    }
                },
               "brand_name" : {
                    "type" : "multi_field",
             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值