ElasticSearch:聚合和" WHERE"输入条款

时间:2014-04-23 16:21:06

标签: search elasticsearch aggregation pyelasticsearch

想知道是否有人可以提供帮助。

我的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日:

  • "火箭":20
  • "宇航员":2
  • "外星人":5

4月2日:

  • "火箭":10
  • "宇航员":12
  • " aliens":51

等等。

我试图做的是:

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执行此操作。

如果索引架构不适合此处,请告诉我(在您的意见中)是什么。

0 个答案:

没有答案