Укажите маршрутизацию в фильтре поиска терминов псевдонима индекса

Я использую Logstash, ElasticSearch и Kibana, чтобы позволить нескольким пользователям входить в систему и просматривать пересланные ими данные журнала. Я создал псевдонимы индексов для каждого пользователя. Они ограничивают свои результаты, чтобы они содержали только их собственные данные.

Я хотел бы назначить пользователей в группы и разрешить пользователям просматривать данные для компьютеров в своей группе. Я создал отношения родитель-потомок между группами и пользователями и создал фильтр поиска терминов для псевдонима.

Моя проблема в том, что я получаю RoutingMissingException, когда пытаюсь применить псевдоним.

Есть ли способ указать маршрут для фильтра поиска терминов? Как я могу искать термины в родительском документе?

Я разместил сопоставление и псевдоним ниже, но полное описание доступно по этой ссылке.

curl -XPUT 'http://localhost:9200/accesscontrol/' -d '{
    "mappings" : {
        "group" : {
            "properties" : {
                "name" : { "type" : "string" },
                "hosts" : { "type" : "string" }
            }
        },
        "user" : {
            "_parent" : { "type" : "group" },
            "_routing" : { "required" : true, "path" : "group_id" },
            "properties" : {
                "name" : { "type" : "string" },
                "group_id" : { "type" : "string" }
            }
        }
    }
}'

# Create the logstash alias for cvializ
curl -XPOST 'http://localhost:9200/_aliases' -d '
{
    "actions" : [
        { "remove" : { "index" : "logstash-2014.04.25", "alias" : "cvializ-logstash-2014.04.25" } },
        { 
            "add" : { 
                "index" : "logstash-2014.04.25",
                "alias" : "cvializ-logstash-2014.04.25",
                "routing" : "intern",
                "filter": {
                    "terms" : {
                        "host" : {
                            "index" : "accesscontrol",
                            "type" : "user",
                            "id" : "cvializ",
                            "path" : "group.hosts"
                        },
                        "_cache_key" : "cvializ_hosts"
                    }
                }
            }
        }
    ]
}'

person cvializ    schedule 25.04.2014    source источник


Ответы (1)


Пытаясь найти обходной путь для этой ошибки, я сообщил об ошибке команде ElasticSearch, и получил от них ответ. Это была ошибка в ElasticSearch, когда фильтр применялся до динамического сопоставления, что приводило к ошибочному выводу. Я включил их обходной путь ниже:

PUT /accesscontrol/group/admin
{
    "name" : "admin",
    "hosts" : ["computer1","computer2","computer3"]
}


PUT /_template/admin_group
{
    "template" : "logstash-*",
    "aliases" : {        
        "template-admin-{index}" : {
            "filter" : {
                "terms" : {
                    "host" : {
                        "index" : "accesscontrol",
                        "type" : "group",
                        "id" : "admin",
                        "path" : "hosts"
                    }
                }
            }
        }
    },
    "mappings": {
      "example" : {
        "properties": {
          "host" : {
            "type" : "string"
          }  
        } 
      }
    }
}


POST /logstash-2014.05.09/example/1
{
    "message":"my sample data",
    "@version":"1",
    "@timestamp":"2014-05-09T16:25:45.613Z",
    "type":"example",
    "host":"computer1"
}


GET /template-admin-logstash-2014.05.09/_search
person cvializ    schedule 14.07.2014