我在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有可能吗?
答案 0 :(得分:1)
如果您已将数据编入索引,如图所示(这意味着:每个文档都有Name,Year和Gear字段),那么正确的查询将返回此类文档的列表。
此类查询的示例如下(更多选项可用 - 有关查询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