es 查询 问题 模糊查询

当你搜索 宝马  bmw 等词可以通过 词典 ,相近词 进行 匹配 (包括 ik 等 分词器) 来解决,当我搜索 com.  或者 cn.  等类型包名的关键词 却匹配不出。不大会说,直接上代码

第一个简单
ik_syno (cname ename host)分词


        $curl_param = [
            'size'=>$size,
            'query'=>[
                'bool'=>[
                    'must'=>[
                        'multi_match'=>[
                            'query'=>$param,
                            'fields'=>[
                                'host','cname^10','ename'
                            ],
                            'tie_breaker'=>0.3
                        ]
                    ]
                ]
                
            ]
        ];

        if($is_en_dian)$curl_param = $curl_param_dian;

        // 接下来 搜索 请求
        结果 com. cn. 等搜不到内容

第二个阶段
        


        if(empty($is_en_dian))
        {
            // 暂时解决 app 域名 搜索
            $app_domain = [
                'com.','cn.','tv.','ctrip.','yong.','jp.'
            ];
            foreach ($app_domain as $key => $value) {
                if(stripos($param,$value)===0)
                {
                    $is_en_dian = 1;
                    break;
                }
            }
        }
        
        $curl_param = [
            'size'=>$size,
            'query'=>[
                'bool'=>[
                    'must'=>[
                        'multi_match'=>[
                            'query'=>$param,
                            'fields'=>[
                                'host','cname^10','ename'
                            ],
                            'tie_breaker'=>0.3
                        ]
                    ]
                ]
                
            ]
        ];

        $curl_param_dian = [
            'size'=>$size,
            'query'=>[
                'bool'=>[
                    'must'=>[
                        [
                            'prefix'=>[
                                'host'=>$param
                            ]
                        ]
                    ]
                ]
                
            ]
        ];


        if($is_en_dian)$curl_param = $curl_param_dian;

        // 接下来 搜索 请求
        // 暂时解决 com. cn. 的问题

接下来 在想能不能一次搞定特殊词的搜索

第三个阶段 

这时候 mapping 配置有所改变

ik_syno(cname ename) 和 english(host) 分词

$curl_param = [
            'size'=>$size,
            'query'=>[
                'bool'=>[
                    'should'=>[
                        [
                            'match'=>[
                                'cname'=>[
                                    'query'=>$param,
                                    'boost'=>10
                                ]
                            ]
                        ],
                        [
                            'match_phrase_prefix'=>[
                                'host'=>$param
                            ]
                        ]
                    ]
                ]
                
            ]
        ];

通过 match_phrase_prefix  可以实现 。但是 必须 should (现有逻辑业务和数据)
基于 sql 插件 可以实现 类似 mysql like  模糊查询 直接 运行 select * from xxx where cname like '%com.%' or ename like '%com.%' or host like '%com.%'

至于有没有更好的方案,进一步思考中。。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值