1

我正在索引文件的元数据,我的映射如下所示:

curl -XPUT "http://localhost:9200/myapp/" -d '
{
    "mappings": {
        "file": {
            "properties": {
                "name": {
                    "type": "string", "index": "not_analyzed"
                },
                "path": {
                    "type": "string", "index": "not_analyzed"
                },
                "user": {
                    "type": "string", "index": "not_analyzed"
                }
            }
        }
    }
}
'

还有一些其他领域,但它们与这个问题无关。这里的“name”是文件的名称,“path”是文件的路径,user 是该文件的所有者。索引数据时可能如下所示:

{ name: 'foo', path: '/', user: 'dude' }
{ name: 'bar', path: '/subfolder/', user: 'dude' }
{ name: 'baz', path: '/', user: 'someotherdude' }

我的问题是如何构建我的查询,以便我可以在给定路径和用户的情况下进行文件夹列表。所以搜索用户“dude”和路径“/”应该会得到“foo”。

4

1 回答 1

6

您可以使用bool,它允许您指定必须匹配才能构成命中的查询。您的查询将如下所示

{
    "query": {
        "bool" : {
            "must" : [ 
                { "match": { "user" : "dude" } },
                { "match": { "path" : "/" } }
            ]
         }
    },
    "fields": ["name"]
}

它的作用是检查术语“dude”和路径“/”是否完全匹配

于 2013-08-13T16:53:54.207 回答