gpt4 book ai didi

php - elasticsearch:搜索词的一部分

转载 作者:行者123 更新时间:2023-12-03 01:55:12 24 4
gpt4 key购买 nike

我正在尝试学习如何使用elasticsearch(使用elasticsearch-php进行查询)。我插入了一些数据,看起来像这样:

['id' => 1, 'name' => 'butter', 'category' => 'food'], 
['id' => 2,'name' => 'buttercup', 'category' => 'food'],
['id' => 3,'name' => 'something else', 'category' => 'butter']

现在,我创建了一个搜索查询,如下所示:
$query = [
'filtered' => [
'query' => [
'bool' => [
'should' => [
['match' => [
'name' => [
'query' => $val,
'boost' => 7
]
]],
['match' => [
'category' => [
'query' => $val,
'boost' => 5
]
]],
],
]
]
]
];

其中$ val是搜索词。这很好用,这是我唯一的问题:当我搜索“黄油”时,我发现编号1和3,而不是2,因为searchterm似乎只匹配确切的单词。有没有一种方法可以搜索“单词内”,或者用mysql术语执行类似WHERE name LIKE'%val%'的操作?

最佳答案

您可以尝试 wildcard 查询

$query = [
'filtered' => [
'query' => [
'bool' => [
'should' => [
['wildcard' => [
'name' => [
'query' => '*'.$val.'*',
'boost' => 7
]
]],
['wildcard' => [
'category' => [
'query' => '*'.$val.'*',
'boost' => 5
]
]],
],
]
]
]
];

query_string 查询。
$query = [
'filtered' => [
'query' => [
'bool' => [
'should' => [
['query_string' => [
'default_field' => 'name',
'query' => '*'.$val.'*',
'boost' => 7
]],
['query_string' => [
'default_field' => 'category',
'query' => '*'.$val.'*',
'boost' => 7
]],
],
]
]
]
];

如果您有大量数据,两者都可以工作,但效果不佳。

正确的方法是使用带有标准 token 生成器的 custom analyzerngram token filter,以便将每个 token 切成小块。

关于php - elasticsearch:搜索词的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37315275/

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