ElasticSearch匹配路径

时间:2014-09-05 13:35:48

标签: elasticsearch elastica

我有一个各种类型的索引,其中用户可能对每种类型具有不同的访问权限。所有记录都有path字段,用于确定用户可以和不可以看到的内容。这是记录的一个例子:

id: 12   type: Project  path: projects/12                   content: …
id: 874  type: Task     path: projects/12/public/tasks/874  content: …
id: 3    type: User     path: users/4                       content: …

如果我知道该用户可以看到users/12users/14users/18projects/*/public/*,您将如何构建一个仅过滤匹配记录和{}内搜索的查询{1}}字段?这很容易使用SQL(并以数据库的FULLTEXT索引为模型),但我需要使它与ElasticSearch一起使用。

1 个答案:

答案 0 :(得分:0)

您可以使用简单的bool查询来实现此目的。对于您提到的特定实例,请尝试以下查询(将<index>替换为实际索引名称)。这将执行所有类型的搜索。当然,您的代码必须足够通用以生成适当的should子句(术语或通配符等)。

POST <index>/_search
{
    "fields": [
       "content"
    ],
    "query": {
        "bool": {
            "should": [
               {
                   "term": {
                      "path": "users/12"
                   }
               },
               {
                   "term": {
                      "path": "users/14"
                   }
               },
               {
                   "wildcard": {
                      "path": "projects/*/public/*"
                   }
               }
            ]
        }
    }
}