gpt4 book ai didi

mongodb - 在查询中使用大写字母时,elasticsearch 将不起作用

转载 作者:可可西里 更新时间:2023-11-01 10:25:39 26 4
gpt4 key购买 nike

我正在使用 Laravel 4.2。我的数据库是 mongodb。我的数据库中有一个名为 products 的表和一个名为 brand 的字段,它的值是大写的 ABC

使用此查询时 ['term' => ['brand' => 'ABC']] 结果集为空。

但是当我尝试使用这个 ['term' => ['brand' => 'abc']] 它实际上正在工作并返回所有带有 brand = 'ABC 的产品'.

我的问题是为什么elasticsearch找不到大写字母?

最佳答案

这是因为您的 brand 字段已被分析,因此 ABC 被标记化并被索引为 abc,因此为什么要搜索 term abc 返回匹配项,而 ABC 不返回匹配项。

为了改变这种行为,您可以为您的 brand 字段创建一个 not_analyzed 的子字段,您将能够搜索大写形式为好吧。

curl -XPUT localhost:9200/my_index/my_type/_mapping -d '{
"properties": {
"brand": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}'

如果您运行上面的命令并重新索引您的数据,您将能够搜索

['term' => ['brand.raw' => 'ABC']]

请注意,您还可以在 brand 字段上使用 match 查询(见下文),它们将返回匹配结果。

['match' => ['brand' => 'abc']]
['match' => ['brand' => 'ABC']]

关于mongodb - 在查询中使用大写字母时,elasticsearch 将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34349473/

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