我添加了一些产品,如“lcd apple iphone 11”“lcd apple iphone x”“lcd apple iphone xs”“lcd apple iphone xr”“lcd samsung s8”“lcd samsung s8+”“lcd apple iphone xs max”“lcd apple iphone xr电池”,我们在去年添加了iphone xr产品
我已经创建了elasticsearch索引 products_idx1
和类型 product
.
当我搜索产品时 apple iphone xr
所以它返回iphonexr,但不在最前面。
我想要的是准确的结果应该是第一,然后部分结果应该是在准确的结果之后。我想要一个排序结果的基础上的准确性的结果。
这是我在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'=>'apple iphone xr','type'=>'cross_fields','fields'=>$values,'operator'=>'AND']
],
['match'=>['all'=>['query'=>'apple iphone xr','operator'=>'AND','fuzziness'=>'AUTO'] ]]
]
]
],
'sort'=>['_score'=>['order'=>'desc']],
],
'index'=>'products_idx1'
];
$response = $client->search($params);
echo "<pre>";print_r($response);
2条答案
按热度按时间h43kikqp1#
虽然bhavya的答案是有效的,但它更复杂,因为它使用
match_phrase
根据您可能拥有的数据集,查询可能更复杂,成本也可能更高,我创建了一个更简单的查询版本。索引示例文档
使用附加simpler match子句的搜索查询
搜索结果显示
iphone xr
排名靠前,得分更高0qx6xfy62#
可以将bool查询与match phrase query结合使用,以分析文本并从分析的文本中创建短语查询。
添加带有搜索查询和搜索结果的工作示例
搜索查询:
搜索结果:
也可以使用多重匹配进行搜索查询