想知道是否有人可以提供帮助。
我的ElasticSearch索引大致定义如下:
{
"properties": {
"content": {
"type": "string"
},
"topics": {
"properties": {
"topic_type": {
"type": "string"
},
"topic": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
所以你最终在索引中的条目大致如下:
{
"content": "some load of content",
"timestamp": "some time stamp",
"id": "some id",
"topics": [
{
"topic": "safety",
"topic_type": "Flight"
},
{
"topic": "rockets",
"topic_type": "Space"
}
]
}
其中每个blob内容可以包含多个与之关联的主题。
我希望能够做到的是:按天计算所有不同的空间"空间"主题例如:
4月1日:
4月2日:
等等。
我试图做的是:
curl -X POST 'http://localhost:9200/myindex/_search?search_type=count&pretty=true' -d '{
"size": "100000",
"query": {
"bool": {
"must": [
{
"term": {
"myindex.topics.topic_type": "space"
}
}
]
}
},
"aggs": {
"articles_over_time": {
"date_histogram": {
"field": "timestamp",
"interval": "day"
},
"aggs": {
"topics_over_time": {
"terms": {
"field": "topics.topic"
}
}
}
}
}
}'
问题在于,虽然只是选择了主题类型为" space"的文章,但其中一些文章还会有其他主题。主题"在#" aggs" bit,即没有topic_type为" space"。
我希望能做的是说" count&聚合[基本上是]那些主题类型'空间'"的主题。
所以在索引中只有这个:
{
"content": "some load of content",
"timestamp": "some time stamp",
"id": "some id",
"topics": [
{
"topic": "safety",
"topic_type": "Flight"
},
{
"topic": "rockets",
"topic_type": "Space"
}
]
}
这将是:火箭:1
在索引中使用这两个:
{
"content": "some load of content",
"timestamp": "some time stamp",
"id": "some id",
"topics": [
{
"topic": "safety",
"topic_type": "Flight"
},
{
"topic": "rockets",
"topic_type": "Space"
}
]
}
{
"content": "some load of content2",
"timestamp": "some time stamp",
"id": "some id",
"topics": [
{
"topic": "safety",
"topic_type": "Flight"
},
{
"topic": "rockets",
"topic_type": "Space"
},
{
"topic": "aliens",
"topic_type": "Space"
}
]
}
它将是:rockets: 2, aliens: 1
- 但所有按天分组。
不确定如何使用ES执行此操作。
如果索引架构不适合此处,请告诉我(在您的意见中)是什么。