gpt4 book ai didi

elasticsearch - 如何在 Laravel 中实现 Elasticsearch 以自动完成

转载 作者:行者123 更新时间:2023-12-02 22:54:15 24 4
gpt4 key购买 nike

我跟着这个精彩的教程Made with love ES laravel tutorial在我正在构建的 Laravel 电子商务应用程序中实现 ES。我让它工作了,但我想稍微调整一下,因为到目前为止,只有当我的查询词与我的一个产品中的整个单词完全匹配时,结果才有效。

我有一个叫做熊裸杏仁棒的健康坚果棒,但是当我输入“bea”时它不匹配任何东西,但是当我输入“bear”时它就起作用了。

这是我目前的搜索查询。

$model = new ProductsListing;

$items = $this->elasticsearch->search([
'index' => $model->getSearchIndex(),
'type' => $model->getSearchType(),
'body' => [
'query' => [
'multi_match' => [
'fields' => ['brand', 'name^5', 'description'],
'query' => $query,
],
],
],
]);

我需要一些帮助来调整查询,以便在我输入时获得结果。

最佳答案

我不熟悉 PHP and laravel ,但是 未在 bea 上给出结果的原因b/c 您正在使用匹配查询,该查询应用在索引时使用的相同分析器,以及您的文本 bear naked almond bar创建 bear , naked , almondbar token 和 bea不匹配任何 token 。
您可以在下面更改您的查询(不确定 laravel 中前缀的正确语法)。

$model = new ProductsListing;

$items = $this->elasticsearch->search([
'index' => $model->getSearchIndex(),
'type' => $model->getSearchType(),
'body' => [
'query' => [
'prefix' => [. --> changed to prefix query.
'fields' => ['brand', 'name^5', 'description'],
'query' => $query,
],
],
],
]);
我假设您正在使用 text默认字段 standard分析器并使用 analyze API,您可以检查为您的文本生成的 token 。
POST your-index/_analyze
{
"text": "bear naked almond bar",
"analyzer" : "standard"
}

{
"tokens": [
{
"token": "bear",
"start_offset": 0,
"end_offset": 4,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "naked",
"start_offset": 5,
"end_offset": 10,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "almond",
"start_offset": 11,
"end_offset": 17,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "bar",
"start_offset": 18,
"end_offset": 21,
"type": "<ALPHANUM>",
"position": 3
}
]
}

关于elasticsearch - 如何在 Laravel 中实现 Elasticsearch 以自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60716639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com