我需要从ElasticSearch索引中获取几个字段的不同值-但它必须作为一个集合是不同的,就像在MySQL查询中一样:
np.dtype([('point', 'f8', (4,)), ('rgb', 'uint8', (4,)), ('something', 'uint8', (4,))])
直到现在,我已经尝试了一些方法来获取此信息,但是对我而言,所有方法都失败了:
1。聚合
SELECT DISTINCT name, type from some_table;
2。脚本 下面的代码返回两个字段的所有可用组合,但不仅返回真正存在的对。
GET test_index/_search
{
"size": 0,
"track_total_hits": false,
"aggs" : {
"features": {
"terms": {
"field" : "feature.name",
"size" : 10,
"order": {
"_key": "asc"
}
}
}
}
}
示例代码:
GET bm_upgraded_visitors/_search
{
"size": 0,
"aggs": {
"t": {
"terms": {
"script": "doc['feature.name'].values + ' | ' + doc['feature.type'].values"
}
}
}
}
示例文档:
PUT test_index
{
"mappings" : {
"_doc" : {
"dynamic" : "false",
"properties" : {
"features" : {
"type": "nested",
"include_in_root": true,
"properties" : {
"name" : {
"type" : "keyword"
},
"value" : {
"type" : "text"
},
"type": {
"type" : "keyword"
}
}
}
}
}
}
}
所需结果:
PUT test_index/_doc/1
{
"features": [
{
"name": "Feature 1",
"value": "Value 1",
"type": "Type 1"
},
{
"name": "Feature 2",
"value": "Value 1",
"type": "Type 2"
}
]
}
答案 0 :(得分:0)
然后,您需要另一个术语子聚合。试试这个:
func wsHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println("Could not upgrade websocket connection")
log.Println(err)
return
}
vars := mux.Vars(r)
if !clientConnected(vars["id"], conn) {
return
}
defer closeConnection(vars["id"], conn)
for {
msgType, msg, err := conn.ReadMessage()
if err != nil {
break
}
log.Printf("%s sent: %s", vars["id"], string(msg))
// ... stuff ...
}
}