Я пытаюсь удалить записи из эластичного поиска путем агрегирования. Я использую следующий запрос.

{
  "aggs": {
    "countfield": {
      "terms": {
        "field": "IaClaimChargeID",
        "size": 100,
        "order": {
          "_count": "desc"
        },
        "min_doc_count": 1
      },
      "aggs": {
        "text": {
          "top_hits": {
            "size": 1,
            "_source": {
              "includes": [
                "ChargeAmount"
              ]
            }
          }
        }
      }
    }
  }
}

Теперь я удаляю все документы, где doc_count> 1. Проблема в том, что существует около 1 миллиона записей, и я не могу получить все записи в одном запросе. Есть ли решение, в котором я могу указать размер разбивки на страницы например, от 1000 до 5000 или есть лучшее решение для этого.

Я получаю doc_count, а затем выполняю запрос на удаление, где doc_count> 1, для значения, поступающего на вывод.

Это результат

 "buckets" : [
        {
          "key" : "$455512-Apr-09", // deleting by this key
          "hits" : []
          doc_count" : 1,
          "text" : {
            "hits" : {
              "total" : 1,
              "max_score" : 1.0,
             }]
0
trinity 11 Окт 2019 в 11:15

2 ответа

У Elasticsearch есть конечная точка для удаления записей по определенному условию, поэтому вы можете использовать для этого конечную точку _delete_by_query.

POST /put_your_index_name_goes_here/_delete_by_query
{
  "query": {
    "match": {
      "doc_count": 1
    }
  }
}

СМ. ССЫЛКУ https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

0
Always Sunny 11 Окт 2019 в 11:51
Итак, вы хотите сказать, что нет необходимости выполнять эту агрегацию ??. Все, что мне нужно сделать, это запустить этот запрос ?? И он удалит документы, где doc_count равно 1?
 – 
trinity
11 Окт 2019 в 11:54
Именно сэр, он должен работать отлично
 – 
Always Sunny
11 Окт 2019 в 12:03
Он не работает. Хотя. Должен ли я запускать агрегацию раньше?. Интересно, на каком основании он будет вычислять doc_count
 – 
trinity
11 Окт 2019 в 12:05
О, мой плохой, я думал, у вас уже есть поле doc_count со значением 1, поэтому добавлено только удаление по конечной точке запроса
 – 
Always Sunny
11 Окт 2019 в 12:11
У меня сейчас есть значение doc_count. Из агрегации, но все же как использовать этот запрос?
 – 
trinity
11 Окт 2019 в 12:11

Вы можете разбивать на страницы таким образом, задав параметры from и size

 {
     "from" : 0, "size" : 10, 
      "aggs": {
        "countfield": {
          "terms": {
            "field": "IaClaimChargeID",
            "size": 100,
            "order": {
              "_count": "desc"
            },
            "min_doc_count": 1
          },
          "aggs": {
            "text": {
              "top_hits": {
                "size": 1,
                "_source": {
                  "includes": [
                    "ChargeAmount"
                  ]
                }
              }
            }
          }
        }
      }
    }

Вы можете посмотреть здесь

Более того, size с from отличается от размера, который вы указываете в агрегировании, размер в агрегировании означает bucketsize. В то время как самый верхний размер относится к количеству документов (его значение по умолчанию - 10).

0
Shubh 16 Окт 2019 в 16:58