我有一个各种类型的索引,其中用户可能对每种类型具有不同的访问权限。所有记录都有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/12
,users/14
,users/18
和projects/*/public/*
,您将如何构建一个仅过滤匹配记录和{}内搜索的查询{1}}字段?这很容易使用SQL(并以数据库的FULLTEXT索引为模型),但我需要使它与ElasticSearch一起使用。
答案 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/*"
}
}
]
}
}
}