Можно ли использовать гнездо для создания сегментов с ключевыми словами / полями, которые не являются строго типизированными?
Из-за характера этого проекта. У меня нет корневых объектов для передачи. Ниже приведен пример.
var result = client.Search<PortalDoc>(s => s
.Aggregations(a => a
.Terms("agg_objecttype", t => t.Field(l => "CUSTOM_FIELD_HERE"))
)
);
Да, такое возможно. Ищет здесь для моего решения с использованием вложенных полей. Он позволяет выполнять все операции с «динамическими» полями, но с несколько большими усилиями (с вложенными полями сложнее манипулировать). В сущности есть некоторые доказательства для поиска, но я также реализовал агрегаты.
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, а агрегирование должно выполняться во вложенном агрегировании. Я сделал это для динамических полей, но, наверное, его можно настроить для чего-то еще. Я сомневаюсь, что с полями, доступными для поиска / агрегирования, может быть больше гибкости из-за принципов работы индексов.
string
неявно конвертировать в Field
, поэтому вы можете передать строку для любого имени поля
var result = client.Search<PortalDoc>(s => s
.Aggregations(a => a
.Terms("agg_objecttype", t => t
.Field("CUSTOM_FIELD_HERE")
)
)
);
Используйте "CUSTOM_FIELD_HERE.Keyword"
(замените Keyword
тем, что называется подполе ключевого слова)
так просто, да? Быстрый вопрос. Я получаю сообщение об ошибке «Fielddata по умолчанию отключена для текстовых полей». Я знаю, что обычно можно поставить .Suffix («Ключевое слово») в конце поля, и оно исчезнет. Как бы то ни было сделать это со строкой?