2013-08-30 33 views
11

我已經配置了我的彈性搜索實現,以便在映射中通過一個id構造結果,並且當我將該方面顯示給用戶時,我需要能夠顯示代表它的人類可讀名稱。我需要的數據全部出現在映射中,但我不確定如何將它作爲方面的一部分返回。當然有可能嗎?ElasticSearch其他方面的數據

考慮下面的例子,我想小面給我一些方式來thingIdthingName(或可能需要的任何其他thing屬性)相關:

映射

{ 
    thingId, 
    thingName 
} 

刻面查詢

{ 
    "facets":{ 
    "things":{ "terms":{ "field":"thingId" } } 
    } 
}  

結果

{ 
    "hits":{ 
    "total":3, 
    "max_score":1.0, 
    "hits":[ 
     ... 
    ] 
    }, 
    "facets":{ 
    "things":{ 
     "_type":"terms", 
     "missing":0, 
     "total":3, 
     "other":0, 
     "terms":[ 
     { 
      "term":"5", 
      "count":1 
     }, 
     { 
      "term":"4", 
      "count":1 
     }, 
     { 
      "term":"2", 
      "count":1 
     } 
     ] 
    } 
    } 
} 

編輯

This answer關於Solr的建議,我刻面這兩個屬性(thingNamethingId),然後就在這兩個方面的結果集循環,假設項的順序會是相同的。我不知道那會有多可靠,但它是一種選擇。

編輯2

This answer表明,這是不可能做到我想要的東西,而不兩個字段組合成一個單一的價值和刻面處爲:thingId|thingName。不理想。

編輯3

This answer表明的值一起組合成單個場和刻面在其上(如上所述),但它使用一個術語腳本實現的結合,因此不需要我索引合併值的形式。仍然不完美,但似乎是最蹩腳的選擇。

+0

結合'thingId'和'thingName'成一個字符串,並在其分裂應用程序層不是沒有問題,但我真的希望有更好的解決方案。 –

+0

我認爲你需要考慮如果你真的需要使用Id的方面。你爲什麼不使用thingName?你有沒有想過? –

+0

使用'thingName'是一個選項,但它不太理想,因爲我不能保證'thingName'是唯一的。 –

回答

3

如果您對使用腳本編寫腳本不太滿意,那麼其他選項將使用nested aggregations,假設您可以使用1.0.0。

你的聚集,然後會是這個樣子:

{ 
    "query": { 
     "match_all": {} 
    }, 
    "aggs": { 
     "theIds": { 
      "terms" : { 
       "field": "thingId" 
      }, 
      "aggs":{ 
       "theNames": { 
        "terms": { 
         "field": "thingName" 
        } 
       } 
      } 
     } 
    } 
} 

而他們的迴應是這樣的:

"aggregations": { 
     "theIds": { 
     "buckets": [ 
      { 
       "key": "1", 
       "doc_count": 5, 
       "theNames": { 
        "buckets": [ 
        { 
         "key": "AAA", 
         "doc_count": 3 
        }, 
        { 
         "key": "BBB", 
         "doc_count": 3 
        }, 
        { 
         "key": "CCC", 
         "doc_count": 2 
        } 
        ] 
       } 
      }, 
      { 
       "key": "2", 
       "doc_count": 2, 
       "theNames": { 
        "buckets": [ 
        { 
         "key": "AAA", 
         "doc_count": 2 
        } 
        ] 
       } 
      } 
     ] 
     } 
    }