2

假设我的 2 个值是“红方”和“绿圈”,当我使用弹性搜索运行聚合时,我得到 4 个值而不是 2 个,空格分隔?它们是红色,方形,绿色,圆形。有没有办法获得 2 个原始值。

代码如下:

 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;
        }
4

1 回答 1

2

在您的映射中,您需要将field1字符串设置为not_analyzed,如下所示:

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

您还可以创建field1一个多字段analyzed并使其两者not_analyzed兼而有之(即分析字段上的文本匹配+not_analyzed原始子字段的确切值的聚合)。

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

如果选择第二个选项,则需要在field1.raw而不是field1.

于 2015-06-04T15:49:41.580 回答