弹性搜索 - 使用布尔值和ids进行OR过滤

时间:2012-02-22 08:21:26

标签: elasticsearch

我正在尝试搜索项目,其中一些项目可能是私有的。

如果某个项目是私有的,则只有项目所有者(array item.friends)的朋友才能看到该项目。 如果它不是私密的,那么每个人都可以看到它。

所以我的逻辑是: 如果项目 is_private(is_private = 0)用户ID(我的示例中为4)位​​于数组item.friends中,则用户可以看到项目

仍然没有结果。现在每个项目都设置为is_private = 1,所以我猜我的ID过滤器出了问题。

有什么建议吗?

// ---- Mapping
{
    "item": {
        "properties": {
            "name": {
                "type": "string"
            },
            "description": {
                "type": "string"
            },
            "created": {
                "type": "date"
            },
            "location": {
                "properties": {
                    "location": {
                        "type": "geo_point"
                    }
                }
            },
            "is_proaccount": {
                "type": "integer"
            },
            "is_given_away": {
                "type": "integer"
            },
            "is_private": {
                "type": "integer"
            },
            "friends": {
                "type": "integer",
                "index_name": "friend"
            }
        }
    }
}

// ----- Example insert
{
    "name": "Test",
    "description": "Test",
    "created": "2012-02-20T12:21:30",
    "location": {
        "location": {
            "lat": "59.919914",
            "lon": "10.753414"
        }
    },
    "is_proaccount": "0",
    "is_given_away": "0",
    "is_private": 1,
    "friends": [
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10
    ]
}

// -----  Query
{
    "from": 0,
    "size": 30,
    "filter": {
        "or": [
            {
                "bool": {
                    "must": [
                        {
                            "term": {
                                "is_private": 0
                            }
                        }
                    ]
                }
            },
            {
                "ids": {
                    "values": [
                        4
                    ],
                    "type": "friends"
                }
            }
        ]
    },
    "query": {
        "match_all": {}
    }
}

1 个答案:

答案 0 :(得分:4)

“ids”过滤器可能并不代表您认为的含义:它会过滤文档 ID(以及可选的文档类型)。

请参阅http://www.elasticsearch.org/guide/reference/query-dsl/ids-filter.html