Агрегация гнезд с динамическими полями - эластичный поиск - PullRequest
0 голосов
/ 26 октября 2018

Можно ли использовать гнездо для создания групп с ключевыми словами / полями, которые не являются строго типизированными?

В связи с характером этого проекта.У меня нет корневых объектов для передачи. Ниже приведен пример.

            var result = client.Search<PortalDoc>(s => s
                        .Aggregations(a => a
                            .Terms("agg_objecttype", t => t.Field(l => "CUSTOM_FIELD_HERE"))
                        )     
                    );

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

string неявно преобразуется в Field, поэтому вы можете передать строку для любого имени поля

var result = client.Search<PortalDoc>(s => s
    .Aggregations(a => a
        .Terms("agg_objecttype", t => t
            .Field("CUSTOM_FIELD_HERE")
        )
    )     
);
0 голосов
/ 26 октября 2018

Да, что-то подобное возможно. здесь ищет мое решение с использованием вложенных полей.Он позволяет выполнять все операции над «динамическими» полями, но с несколько большими усилиями (с вложенными полями сложнее манипулировать).Суть есть некоторые доказательства для поиска, но я также реализовал агрегации.

curl -XPOST localhost:9200/something -d '{
    "mappings" : {
        "live" : {
            "_source" : { "enabled" : true },
            "dynamic" : false,
            "properties" : {
                "customFields" : {
                    "type" : "nested",
                    "properties" : {
                        "fieldName" : { "type" : "string", "index" : "not_analyzed" },
                        "stringValue": {
                            "type" : "string",
                            "fields" : {
                                "raw" : { "type" : "string", "index" : "not_analyzed" }
                            }
                        },
                        "integerValue": { "type" : "long" },
                        "floatValue": { "type" : "double" },
                        "datetimeValue": { "type" : "date", "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd" },
                        "booleanValue": { "type" : "boolean" }
                    }
                }
            }
        }
    }
}'

Поиск должен быть выполнен в том же вложенном запросе с использованием AND, а агрегации должны быть выполнены во вложенной агрегации.Я сделал это для динамических полей, но это, вероятно, можно настроить для чего-то еще.Я сомневаюсь, что с поисковыми / агрегируемыми полями может быть больше гибкости из-за принципов работы индексов.

...