0

我有一个包含各种类型的索引,其中用户可能对每种类型具有不同的访问权限。所有记录都有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/*,您将如何构建一个仅过滤匹配记录并在content字段内搜索的查询?这很容易使用 SQL(并围绕数据库的 FULLTEXT 索引建模),但我需要使其与 ElasticSearch 一起使用。

4

1 回答 1

0

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

POST <index>/_search
{
    "fields": [
       "content"
    ],
    "query": {
        "bool": {
            "should": [
               {
                   "term": {
                      "path": "users/12"
                   }
               },
               {
                   "term": {
                      "path": "users/14"
                   }
               },
               {
                   "wildcard": {
                      "path": "projects/*/public/*"
                   }
               }
            ]
        }
    }
}
于 2014-09-06T04:36:56.727 回答