在查询

时间:2015-12-18 06:10:50

标签: mongodb elasticsearch laravel-4 elasticsearch-plugin

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

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

但是当我尝试使用此['term' => ['brand' => 'abc']]时,它实际上正在运行并返回所有带brand = 'ABC'的产品。

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

1 个答案:

答案 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']]