Как динамически разбивать на страницы в эластичном поисковом запросе - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь удалить записи из упругого поиска с помощью агрегации, я использую следующий запрос:

{
  "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,
             }]

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Вы можете выполнить нумерацию страниц, задав параметры 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 с помощьюотличается от размера, который вы задаете в агрегации, размер в агрегации означает размер сегмента . Поскольку самый верхний размер относится к количеству документов (его значение по умолчанию равно 10)

0 голосов
/ 11 октября 2019

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

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

SEE REF. https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...