Elasticsearch确切结果不会在第一时间返回

尼拉帕特尔

我添加了一些产品,例如“ lcd苹果iphone 11”,“ lcd苹果iphone x”,“ lcd苹果iphone xs”,“ lcd苹果iphone xr”,“ lcd三星s8”,“ lcd三星s8 +”,“ lcd苹果iphone xs max”,“ lcd苹果” “ iPhone XR电池”,我们最近添加了iPhone XR产品,因此

我已经创建了elasticsearch indexproducts_idx1和type product

当我搜索这样的产品时apple iphone xr,它会返回iphone xr,但不会获得最佳结果。

我想要的是确切结果,然后是部分结果应在精确结果之后。我要根据准确性结果对结果进行排序。

这是我在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);
Elasticsearch忍者

虽然bhavya的答案有效,但由于使用match_phrase查询更为复杂(根据您可能拥有的数据集查询可能更复杂且成本更高),我为此查询创建了一个更简单的版本。

索引样本文档

{
    "title" : "lcd apple iphone xr"
}
{
    "title" : "lcd apple iphone 11"
}
{
    "title" : "lcd apple iphone x"
}
{
    "title" : "lcd apple iphone xs"
}
{
    "title" : "iphone xr"
}

使用其他更简单的match子句的搜索查询

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "title" : "apple iphone xr"
                    }
                },
                {
                    "match": {    --> simple additional match clause solves issue.
                        "title": "iphone xr"
                    }
                }
            ]
        }
    }
}

搜索结果显示iphone xr在顶部,得分更高

 "hits": [
            {
                "_index": "64129903",
                "_type": "_doc",
                "_id": "6",
                "_score": 1.8347404, // note score is higher than other results.
                "_source": {
                    "title": "iphone xr"
                }
            },
            {
                "_index": "64129903",
                "_type": "_doc",
                "_id": "2",
                "_score": 1.8268716,
                "_source": {
                    "title": "lcd apple iphone xr"
                }
            },
            {
                "_index": "64129903",
                "_type": "_doc",
                "_id": "3",
                "_score": 0.54542315,
                "_source": {
                    "title": "lcd apple iphone 11"
                }
            },
            {
                "_index": "64129903",
                "_type": "_doc",
                "_id": "4",
                "_score": 0.54542315,
                "_source": {
                    "title": "lcd apple iphone x"
                }
            },
            {
                "_index": "64129903",
                "_type": "_doc",
                "_id": "5",
                "_score": 0.54542315,
                "_source": {
                    "title": "lcd apple iphone xs"
                }
            }
        ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ViewPropertyAnimator-动画不会在第一时间发生

折叠式工具栏布局不会在第一时间展开,并且销钉不起作用

熊猫滚动如何保留每个时间窗口的第一时间索引

第一时间的时间复杂度是多少?

过渡在第一时间不起作用

MAGENTO:如何改善第一时间

的onClick功能仅适用于在第一时间反应过来?

如何通过在ChildEventListener onChildAdded情况称为第一时间之后?

javafx谓词仅在第一时间触发

如何在第一时间连接到备用本地Postgresql集群?

为什么“写”功能在第一时间不起作用?

复选框在第一时间不起作用

在php的第一时间包括Session和Cookie

如何在第一时间获得更新的状态?

KalmanFilter总是在第一时间预测0,0

jQuery Deferred的JavaScript承诺仅在第一时间解决

Android Edit Text Cursor的位置在第一时间没有变化

useState Hook在调用函数的第一时间上不起作用

React在第一时间不呈现useEffect

为什么迭代器没有经过第一时间?

第五时间源.zshrc比第一时间需要明显更多的时间

时间戳记:按下F5记事本会给出第一时间,然后是日期。我该如何约会第一时间然后是时间?

Excel工作表SelectionChange事件不会触发第一时间,但可以第二次工作

让 switch stmt 无结果运行,或者检查 switch var 类型以在第一时间不触发它

为什么创建TagLib :: FileRef仅在第一时间花费时间?

LaTeX或Texmaker中是否存在错误,因为它们没有在第一时间显示参考?

如何从每十二小时发生的每个“组”事件中提取第一时间戳

为什么我的java代码在第一时间结束得这么早?

如果未分类数据的变量在第一时间匹配n次,则SAS分配二进制值