Агрегация Elasticsearch по результатам Предложения - PullRequest
0 голосов
/ 22 ноября 2018

Я новичок в Elasticsearch.Я хочу агрегировать результат Completion Suggester.

В поле «метки», как показано ниже, добавлено несколько индексов, и несколько тегов добавлено.

Документы

GET http://localhost:9200/index1/user-category1/1?pretty

{
  "_index": "index1",
  "_type": "user-category1",
  "_id": "1",
  "_version": 1,
  "found": true,
  "_source": {
    "user_id": 1,
    "tags": [
      "Apple",
      "Orange",
      "Peach"
    ]
  }
}

GET http://localhost:9200/index2/user-category2/2?pretty
{
  "_index": "index2",
  "_type": "user-category2",
  "_id": "2",
  "_version": 1,
  "found": true,
  "_source": {
    "user_id": 2,
    "tags": [
      "Grape",
      "Apple"
    ]
  }
}

А затем я создал такие сопоставления.

Отображения

  "tags": {
  "type": "text",
  "fields": {
    "raw": {
      "type": "keyword"
    },
    "suggest": {
      "type": "completion"
    }
  }
}

Запрос

POST http://localhost:9200/_all/_search?pretty
{
  "_source": false,
  "suggest": {
    "tags_suggest": {
      "prefix": "A",
      "completion": {
        "field": "tags.suggest"
      }
    }
  }
}

Result

{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 2,
    "successful": 2,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": 0,
    "hits": []
  },
  "suggest": {
    "tags_suggest": [
      {
        "text": "A",
        "offset": 0,
        "length": 1,
        "options": [
          {
            "text": "Apple",
            "_index": "index1",
            "_type": "user-category1",
            "_id": "1",
            "_score": 1
          },
          {
            "text": "Apple",
            "_index": "index2",
            "_type": "user-category2",
            "_id": "2",
            "_score": 1
          }
        ]
      }
    ]
  }
}

Запрос корректно возвращает результаты предложений, однако проблема в том, что я не могу получить общее количество «Apple». Как я могу получить результаты, как показано ниже?

"aggregations": {
  "keywords": {
    "doc_count_error_upper_bound": 0,
    "sum_other_doc_count": 0,
    "buckets": [
      {
        "key": "Apple",
        "doc_count": 2
      }
    ]
  }
}

Я попробовал запрос ниже, но он не работает.

  {
  "_source": false,
  "suggest": {
    "tags_suggest": {
      "prefix": "A",
      "completion": {
        "field": "tags.suggest"
      }
    }
  },
  "aggs": {
    "tags": {
      "terms": {
        "field": "tags.keyword"
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...