具有过期字段的用户的 FusionAuth ElasticSearch

FusionAuth ElasticSearch for users with expiry field

我正在尝试列出所有设置了过期字段的用户。

我想创建一个列表,其中包含所有已过期的列表以及已将其设置为过期时间的列表。

第 1 步实际上是获取所有用户。但是,我没有使用文档建议的查询进行管理:

POST 请求:

{
"search": {
    "numberOfResults": 50,
    "query": "{\"exists\": {\"field\": \"expiry\"}}",
    "sortFields": [
        {
            "missing": "_first",
            "name": "email",
            "order": "asc"
        }
    ],
    "startRow": 0
}
}

这个returns没有匹配项。我确信我至少有 3 个用户设置了到期字段。没有到期的字段甚至不存在。

我试过逆向查询:

"query": "{\"bool\": {\"must_not\": {\"exists\": {\"field\": \"user.id\"}}}}",

这让我获得了所有用户。 我还尝试了一个更简单的查询来验证它是否返回了某些东西。

expiry 是一个位于根上的元素,正如在 FusionAuth docs:

上看到的那样
{
  "user": {
    "birthDate": "1976-05-30",
    "data": {
      "displayName": "Johnny Boy",
      "favoriteColors": [
        "Red",
        "Blue"
      ]
    },
    "email": "example@fusionauth.io",
    "encryptionScheme": "salted-sha256",
    "factor": 24000,
    "expiry": 1571786483322,
    "firstName": "John",
    "fullName": "John Doe",
    "imageUrl": "http://65.media.tumblr.com/tumblr_l7dbl0MHbU1qz50x3o1_500.png",
    "lastName": "Doe",
    "memberships": [{
...

谁能指出我遗漏了什么?这是查询的问题吗?

expiry 未编入索引,因此您将无法对其进行搜索。我们应该更新文档以指示哪些字段已编入索引,但在此之前您可以查看 elasticsearch 索引以了解这一点。

curl -XGET http://elasticsearchhost:port/fusionauth_user/_mapping

您可以提交功能请求以将过期添加到索引字段:https://github.com/fusionauth/fusionauth-issues/issues

这里有一个关于同一主题的论坛 post:https://fusionauth.io/community/forum/topic/1095/how-can-i-see-which-fields-are-indexed