多关键词搜索问题?

如果搜索(内存条 金士顿)或者(金士顿 内存条)等带有空格的关键词搜索结果是没有问题的,但很多用户不懂得使用空格,当搜索(金士顿内存条),不带空格的时候搜索结果就会出问题,我发进行分词,这个应该怎么解决一下呢,感谢!

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
leo
最佳答案

可以自行引入分词库,或者直接使用 Elasticsearch 的分词:

$ curl -XPOST -H'Content-type: application/json' localhost:9200/_analyze?pretty -d'{"analyzer":"ik_smart","text":"金士顿内存条"}'
5年前 评论
讨论数量: 7
leo

可以自行引入分词库,或者直接使用 Elasticsearch 的分词:

$ curl -XPOST -H'Content-type: application/json' localhost:9200/_analyze?pretty -d'{"analyzer":"ik_smart","text":"金士顿内存条"}'
5年前 评论
张汉为

@leo 能详细说明一下解决方案吗,感谢

5年前 评论

@leo 我也想知道这个问题哈,有没有具体的在代码里写的例子看一下呢,代码里是如何实现的呢?看了看文档也不知道用哪种方法解决,萌币中.....

5年前 评论

加上 "operator": "and" 即可,这样所有关键字必须都被匹配

4年前 评论
ShiKi

直接上代码

        $params = [
            'index' => 'products',
            'body' => [
                'sort' =>[ ['price' => 'asc']],
                'query' => [
                    'bool' => [
                        'must' => [
                            [
                                'multi_match' => [
                                    'query'  => '金士顿内存条',
                                    "operator" => "and",
                                    'fields' => [
                                        'title^3',
                                        'long_title^2',
                                        'description',
                                    ],
                                ],
                            ],
                        ],
                    ],
                ]
            ]
        ];
        $res = $this->es->search($params);
2年前 评论
LooKkk 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!