我正在使用laravel 4.2。我的数据库是mongodb。我有一个名为products的表和我的数据库中的一个字段,名为brand
,其值为ABC
大写。
使用此查询['term' => ['brand' => 'ABC']]
时,结果集为空。
但是当我尝试使用此['term' => ['brand' => 'abc']]
时,它实际上正在运行并返回所有带brand = 'ABC'
的产品。
我的问题是为什么elasticsearch找不到大写字母?
答案 0 :(得分:2)
这是因为您的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']]
请注意,您还可以在match
字段中使用brand
个查询(请参阅下文),他们将返回匹配项。
['match' => ['brand' => 'abc']]
['match' => ['brand' => 'ABC']]