【问题标题】:Searching multiple fields in elasticsearch在elasticsearch中搜索多个字段
【发布时间】:2013-08-14 06:39:40
【问题描述】:

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

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”。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

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

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

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

    【讨论】:

    • 这工作正常,如果我例如在命令行上卷曲它。由于我在 JavaScript 环境中并直接从 JS 构建查询对象,因此由于“布尔”部分中有多个“必须”而变得有问题。正在思考如何解决这个问题。有什么建议么? :)
    • 想通了。如果您可以将答案更新为“必须”,那就太好了:[ {“match”:{“user”:“dude”}},{“match”:{“path”:“/”}}]
    • 感谢大家的贡献。它在这里像时钟一样工作。非常快速和干净! :)
    • 这真是太棒了,而且快得疯狂!
    • 谢谢!我一直在寻找这样的东西
    猜你喜欢
    • 2018-12-22
    • 1970-01-01
    • 2020-09-03
    • 2021-12-06
    • 2014-01-16
    • 2013-08-13
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多