ElasticSearch получить последние n различных записей - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь реализовать поисковый запрос по записям, хранящимся вasticsearch.Структура записи выглядит примерно так:

   {
    "_index" : "box_info_store",
    "_type" : "boxes",
    "_id" : "pWjQLWkBIJk0ORjd0X2P",
    "_score" : null,    
    "_source" : {
      "transactionID" : "60ab66cf24c9924f562bf1a2b5d92305d0a6",
      "boxNumber" : "Box3",
      "createDate" : "2013-09-17T00:00:00",
      "itemNumber" : "Item1",
      "address" : "Sample Address"
    }
  }

одна коробка может содержать несколько элементов.Например, Box3 может иметь Item1, Item2 и Item3.Так что вasticsearch у меня будет 3 разных документа.Также в одно и то же время могут существовать один и тот же ящик и один и тот же элемент, но с другим адресом.Код транзакции может или не может быть одинаковым для этих документов.

Мое требование - получить последние n последних и уникальных идентификаторов транзакции вместе с их записями.

Я попытался выполнить следующий запрос, чтобы получить последние 7 различныхID транзакции

GET /box_info_store/boxes/_search?size=7
{
  "query": {
    "bool": {
       "must": [
         {"match":{"boxNumber":"Box3"}},
         {"match":{"itemNumber":"Item1"}}
         ]
    }
  },
  "sort": [
    {
      "createDate": {
        "order": "desc"
      }
    }
  ],
  "aggs": {
    "distinct_transactions": {
      "terms": { "field": "transactionID"}
    }
  }
}

Это последние 7 документов, в которых boxNumber равен Box3, а itemNumber равен Item1, но не 7 различных идентификаторов транзакции, два из этих семи документов имеют один и тот же идентификатор транзакции (хотя оба имеют отдельный адрес).Но мое требование состоит в том, чтобы получить 7 различных идентификаторов транзакций, независимо от того, сколько документов он возвращает.

Надеюсь, я смог объяснить сам.Оцените любую помощь здесь

Спасибо

------ Отредактировано @ gaurav9620, я выполнил первый запрос и получил число 32, затем я выполнил второй запрос с другим счетом как3 я получил следующий результат

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 32,
    "max_score" : null,
    "hits" : [
      {
        "_index" : "box_info_store",
        "_type" : "boxes",
        "_id" : "RWjRLWkBIJk0ORjdEX-L",
        "_score" : null,
        "_source" : {
          "transactionID" : "3087e106244f6247a5290fb21ce64254529c",
          "boxNumber" : "Box3",
          "createDate" : "2017-11-15T00:00:00",
          "itemNumber" : "Item1",
          "address" : "sampleAddress12",
        },
        "sort" : [
          1510704000000
        ]
      },
      {
        "_index" : "box_info_store",
        "_type" : "boxes",
        "_id" : "MGjQLWkBIJk0ORjdwX0M",
        "_score" : null,
        "_source" : {
          "transactionID" : "60ab66cf24c9924f562bf1a2b5d92305d0a6",
          "boxNumber" : "Box3",
          "createDate" : "2016-04-03T00:00:00",
          "itemNumber" : "Item1",
          "address" : "sampleAddress321",
        },
        "sort" : [
          1459641600000
        ]
      },
      ..........
      ..........
      ..........
      {
        "_index" : "box_info_store",
        "_type" : "boxes",
        "_id" : "AGjRLWkBIJk0ORjdK4CJ",
        "_score" : null,
        "_source" : {
          "transactionID" : "3087e106244f6247a5290fb21ce64254529c",
          "boxNumber" : "Box3",
          "createDate" : "1996-02-16T00:00:00",
          "itemNumber" : "Item1",
          "address" : "sampleAddress4324",
        },
        "sort" : [
          824428800000
        ]
      }
    ]
  },
  "aggregations" : {
    "unique_transactions" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 16,
      "buckets" : [
        {
          "key" : "3087e106244f6247a5290fb21ce64254529c",
          "doc_count" : 6
        },
        {
          "key" : "27c5f3422f4482495d29e7b2c15c0e311743",
          "doc_count" : 5
        },
        {
          "key" : "c40e53212e74e24bf02a5bd2b134cf92bffb",
          "doc_count" : 5
        }
      ]
    }
  }
}

1 Ответ

0 голосов
/ 27 февраля 2019

Размер, который вы использовали: представляет количество необработанных документов, которые будут получены.

Если вам нужно сделать следующее:

  1. Укажите размер 0 ->, который не вернет вам необработанные документы
  2. Включите размерпараметр в агрегации, который вернет вам уникальные 7 идентификаторов.

    GET / box_info_store / boxes / _search? size = 7 {"query": {"bool": {"must": [{"match": {"boxNumber": "Box3"}}, {"match": {"itemNumber": "Item1"}}]}}, "sort": [{"createDate": {"order": "desc"}}], "aggs": {"different_transactions": {"rules": {"field": "actionID "," size ": 7}}}}

РЕДАКТИРОВАТЬ-------------------------------------

Сначала запустите этот запрос

GET /box_info_store/boxes/_search?size=0
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "boxNumber": "Box3"
          }
        },
        {
          "match": {
            "itemNumber": "Item1"
          }
        }
      ]
    }
  }
}

Здесь вы найдете общее количество документов, соответствующих вашему запросу, которое вы можете установить как n После этого запустите ваш запрос, как показано ниже

GET /box_info_store/boxes/_search?size=**n**
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "boxNumber": "Box3"
          }
        },
        {
          "match": {
            "itemNumber": "Item1"
          }
        }
      ]
    }
  },
  "sort": [
    {
      "createDate": {
        "order": "desc"
      }
    }
  ],
  "aggs": {
    "distinct_transactions": {
      "terms": {
        "field": "transactionID",
        "size": NUMBER_OF_UNIQUE_TRANSACTION_IDS_TO_BE_FETCHED
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...