es 查询 问题 模糊查询

来源:互联网 发布:小榕sql注入工具 编辑:程序博客网 时间:2024/05/27 20:52

当你搜索 宝马  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 (现有逻辑业务和数据)至于有没有更好的方案,进一步思考中。。。。


0 0