0

我在 ElasticSearch 中有这样的文档。我想进行搜索并获得像 sql server pivot 这样的结果。但我不知道我该怎么做。

Name | Year | Gear
C30    2012    A
C30    2011    M
C30    2014    M
C30    2015    A
C30    2013    A
V40    2012    A
V40    2013    M
V40    2015    A
S60    2012    M
S60    2011    A

当我搜索“C30 A”时,我想显示这样的数据。

Name | Years
C30    2012,2015,2013 

我怎样才能做到这一点 ?ES有可能吗?

4

1 回答 1

1

如果您已经将数据索引,如图所示(这意味着:每个文档都有一个名称、年份和齿轮字段),那么正确的查询将返回此类型文档的列表。

下面是此类查询的一个示例(提供更多选项 - 有关查询 dsl 的更多信息,请在此处查看 - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl.html)。

"query": {
    "bool": {
        "must": [
           {"match": { "Name": "C30" }},
           {"match": { "Gear": "A" }}               
        ]
    }
}

如果您想要一个与您描述的结果相同的结果,您应该在从搜索结果中收到数据后对您的数据进行一些后处理。

但是,如果您的数据尚未编入索引,或者您不关心更改您的策略,那么我建议对您的数据进行非规范化并以最适合您的形式对它们进行索引。我建议索引如下文档:

public class ObjectToIndex{
    public string Name;
    public string Gear;
    public List<string> Years;
}

您的数据现在看起来像

Name | Gear | Years
C30     A   2012,2015,2013
C30     M   2011,2014
V40     A   2012,2015
V40     M   2013
S60     A   2011
S60     M   2012

在这种情况下,像上面这样的查询会返回一个文档,比如:

C30, A,  2012,2015,2013
于 2015-02-10T10:59:07.437 回答