2015-06-04 127 views
2

假設我的2值是「紅色方塊」和「綠色圓圈」, 當我使用彈性搜索運行聚合時,我得到4個值而不是2,空格分隔了嗎? 他們是紅色,正方形,綠色,圓形。 有沒有辦法獲得2個原始值。ElasticSearch C#客戶端(NEST):使用空間訪問嵌套聚合

的代碼如下:

var result = this.client.Search<MyClass>(s => s 
      .Size(int.MaxValue) 
      .Aggregations(a => a 
      .Terms("field1", t => t.Field(k => k.MyField)) 
      ) 
      ); 


     var agBucket = (Bucket)result.Aggregations["field1"]; 

     var myAgg = result.Aggs.Terms("field1"); 
     IList<KeyItem> list = myAgg.Items; 

     foreach (KeyItem i in list) 
     { 
      string data = i.Key; 
     } 

回答

1

在你的地圖,你需要設置field1字符串作爲not_analyzed,像這樣:

{ 
    "your_type": { 
     "properties": { 
      "field1": { 
       "type": "string", 
       "index": "not_analyzed" 
      } 
     } 
    } 
} 

您也可以field1一個multi-field並使它analyzednot_analyzed以獲得兩個世界的最好結果(即在分析字段上的文本匹配+對的確切值的聚合3210原始子字段)。

{ 
    "your_type": { 
     "properties": { 
      "field1": { 
       "type": "string", 
       "fields": { 
        "raw": { 
         "type": "string", 
         "index": "not_analyzed" 
        } 
       } 
      } 
     } 
    } 
} 

如果選擇第二種選擇,你需要在field1.raw而不是field1運行聚集。

+0

它的工作原理,非常感謝 –

+0

.NET代碼..var結果= this.client.Map (M =>米 的.properties(道具=>道具 .MultiField(S =>取值 請將.Name(對=> p.Plan) 。字段(pprops => pprops .String(ps => ps.Name(p => p.Plan).Index(FieldIndexOption.NotAnalyzed)) .String(ps => ps.Name ( 「原始」)指數(FieldIndexOption.Analyzed)) ) ) ) )。 –

+0

有沒有辦法獲得聚合項目的計數?像3「紅場」4「綠圈」 –

相關問題