我正在尝试对存储在elasticsearch中的记录实现搜索查询。记录结构看起来像这样。
{
"_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。因此,在elasticsearch中,我将有3个不同的文档。同时,同一个框和同一个项目也可以存在,但地址不同。这些文档的transactionID可能相同,也可能不相同。
我的要求是获取最后n个最近的和不同的TransactionID,以及它们的记录。
我尝试以下查询来获取最后7个不同的transactionID
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个不同的transactionID,这7个文档中有两个具有相同的transactionID(但都有单独的地址)。但我的要求是获得7个不同的TransactionID,无论它返回多少个文档。
希望我能解释我自己。感谢您的帮助
谢啦
------编辑@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
}
]
}
}
}
您使用的大小:表示检索到的原始文档的数量。
如果您的案例需要做的是:
>
GET /box_info_store/boxes/_search? size=7{"查询":{"bool":{"必须": [ { "匹配":{"boxNumber":"Box3" } }, { "匹配":{"itemNumber":"Item1" } } ] } }, "排序": [ { "createDate":{"order":"desc" } } ], "aggs":{"distinct_transactions":{"条款":{"field":"transactionID","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
}
}
}
}
问题内容: 我有一个包含以下列的数据库表: 在此表中,唯一的唯一值位于id中,即主键。 我想基于datetime值检索该表中的最后一组不同的记录。例如,下面是我的桌子 我想检索ID为4、7、8和9的记录,即具有不同代码(基于datetime值)的最后一组记录。我强调的只是我要实现的目标的一个示例,因为此表最终将包含数百万条记录和数百个单独的代码值。 我可以使用什么SQL语句来实现这一目标?我似乎无
问题内容: 我正在使用mysql并遇到一些问题。我想检索插入的最后一行。 <<以下是详细>> 以下是我创建表格的方式。 我在其中插入了四个值,如下所示 当我执行时,我得到如下输出 当我尝试下面的代码时, 我得到如下输出。 但是,当我使用代码时,出现错误 使用时,表中没有任何数据。 链接以播放数据 注意: 这里我使用4只是为了获得所需的输出。稍后我可以从查询中获取 如果我只想查看最后一条记录,请建议
问题内容: 我想做一个查询,从中选择一堆数据,但是我希望能够通过仅选择每三个记录,甚至每个百分之一的记录来降低数据的分辨率。任何。 有什么简单的方法可以用ActiveRecord做到这一点吗? 问题答案: 在Oracle中,我将其编写如下: 这样做的好处是,过滤器发生在数据库中,因此不会检索所有内容。 在PostgreSQL中,这称为(实际上是SQL标准)。在MySQL中,不支持此功能。 在mys
问题内容: 注意:我看过 其他问题,并尝试过从中得出的答案,但是没有运气。 我在MongoDB中有一个集合: 我需要找到等于 10的 最后10个条目。听起来简单吗? 但是运行该命令可以得到 前 10条记录,而不是最后10条记录。看起来驱动程序的优先级为“ limit”而不是“ sorting” …我也尝试并进行排序。每当我从命令行运行相同的查询时,我都会得到所需的信息。这是我在命令行中键入的内容:
问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: SQL Server:只有GROUP BY中的最后一个条目 我有一个这样的表: 我使用以下查询: 以上查询的结果: 在结果组上方按名称排列行,但显示每个组的第一行。我想从每个组中选择最后一行(按ID)。 例如: 如何编写以上结果的查询。 谢谢 问题答案: 甚至可能不再需要该组。
本文向大家介绍MySQL获取所有分类的前N条记录,包括了MySQL获取所有分类的前N条记录的使用技巧和注意事项,需要的朋友参考一下 比如有文章表 Article(Id,Category,InsertDate),现在要用SQL找出每种类型中时间最新的前N个数据组成的集合,一段不错的代码,留存备用 @N 就是你要取多少条 下面是我用到了一个产品分类表中,superId是大分类,prcid是产品分类。能