Как быстро собрать большое количество данных - PullRequest
0 голосов
/ 24 марта 2020

Мне нужно агрегировать все ключевые слова в новостях за период времени, например:

{
  "news_ID":"123456",
  "news_content":"Apple pencil",
  "keywords": {
      [
        {
         "word" : "Apple",
         "score" : 0.0653220043
        },
        {
         "word" : "pencil",
         "score" : 0.7096893191
        }
      ]
    },
  "publish_time":"2020-01-03"
}

Я хочу знать, сколько раз apple появлялось между 2020-01 и 2020-02 гг. , но слишком много ключевых слов ...

Не могли бы вы посоветовать мне, как мне подходить к этому требованию в соответствии с передовой практикой?

1 Ответ

0 голосов
/ 24 марта 2020

Синхронизация семпла делает c:

PUT tester/_doc/1
{
  "news_ID":"123456",
  "news_content":"Apple pencil",
  "keywords":[
    "apple",
    "pencil"
  ],
  "publish_time":"2020-01-03"
}

Использование агрегирования терминов с фильтром диапазона на верхнем уровне:

GET tester/_search
{
  "size": 0,
  "query": {
    "range": {
      "publish_time": {
        "gte": "2020-01-01",
        "lt": "2020-02-01"
      }
    }
  },
  "aggs": {
    "by_keywords": {
      "terms": {
        "field": "keywords.keyword"
      }
    }
  }
}

Вы также можно использовать отфильтрованное агрегирование для агрегирования по нескольким ежемесячным сегментам:

GET tester/_search
{
  "size": 0,
  "aggs": {
    "2020-01_2020-02": {
      "filter": {
        "range": {
          "publish_time": {
            "gte": "2020-01-01",
            "lt": "2020-02-01"
          }
        }
      },
      "aggs": {
        "by_keywords": {
          "terms": {
            "field": "keywords.keyword"
          }
        }
      }
    },
    "2020-02_2020-03": {
      "filter": {
        "range": {
          "publish_time": {
            "gte": "2020-02-01",
            "lt": "2020-03-01"
          }
        }
      },
      "aggs": {
        "by_keywords": {
          "terms": {
            "field": "keywords.keyword"
          }
        }
      }
    }
  }
}
...