【发布时间】:2020-09-12 10:47:23
【问题描述】:
我在 elasticsearch 索引 products_idx1 中添加了 15k 条记录并输入 product。
在像apple iphone 6 这样的记录产品名称中,所以当我搜索iphone6 时它返回空数据。
这是我在 php elasticsearch 中的代码
<?php
use Elasticsearch\ClientBuilder;
require 'vendor/autoload.php';
$client = ClientBuilder::create()->build();
$values =['name','name.prefix','name.suffix','sku'];
$params =
[
'client'=>['verify'=>1,'connect_timeout'=>5],
'from'=> 0,
'size'=>25,
'body' =>[
'query' => [
'bool'=>
[
'should'=> [[
'multi_match'=> ['query'=>'iphone6','type'=>'cross_fields','fields'=>$values,'operator'=>'OR']
],
['match'=>['all'=>['query'=>'iphone6','operator'=>'OR','fuzziness'=>'AUTO'] ]]
]
]
],
'sort'=>['_score'=>['order'=>'desc']],
],
'index'=>'products_idx1'
];
$response = $client->search($params);
echo "<pre>";print_r($response);
【问题讨论】:
-
你只得到“iphone”的结果吗?
-
不,我只是举个例子,如果有人像 appleiphone 搜索,那么它应该返回结果,所以我应该做搜索分析器吗?
-
@Nate 现在,如果我搜索“iphone6”,我得到的结果为零
-
您需要有匹配的标记,并且 b/c ES 默认将文本拆分为空格上的标记我认为这就是为什么您使用这些查询获得 0 个结果的原因。有
prefix查询可能会有所帮助,您可以设置另一个字段变体,其中所有空格都被删除作为备用分析。有很多选择 -
@Nate 我不知道正确的方法。如果您向我提供参考链接,我可以对此进行研究并在我的项目中实施
标签: php elasticsearch elasticsearch-analyzers