gpt4 book ai didi

elasticsearch - Elasticsearch 嵌套查询-如何仅基于嵌套文档的第一个实例进行过滤以回答过滤器

转载 作者:行者123 更新时间:2023-12-02 22:35:19 25 4
gpt4 key购买 nike

我有一个包含对象数组的对象。
该数组被映射为嵌套。
假设阵列是我这些年来拥有的所有汽车的列表。

我希望能够搜索在特定时间点专门拥有“福特”的所有人员。

我的数据仅包含汽车的“购买日期”。

假设我有一个人曾经有一个福特,然后又换了一辆本田。

我的嵌套过滤器会说:
“给我所有购买日期小于或等于“特定时间点”且模型为“福特”的人”

考虑我的数据-我会让上面的人如实回答我的查询。

我想搜索与我的时间点相关的所有嵌套文档,然后仅查询最新的子文档以查看该模型是否为Ford。

这有可能吗?

谢谢!!!

最佳答案

下面是示例映射,文档结构,查询以及响应的查询

对应:

PUT mycars
{
"mappings":{
"properties":{
"cars":{
"type":"nested",
"properties":{
"purchase_date":{
"type":"date"
},
"type":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
},
"owner":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
}
}

如果您注意到映射,则嵌套字段将是 cars,其以 purchase_date作为日期字段,而 type作为文本字段,同时具有文本和关键字类型。

我还添加了一个 owner字段,目的是为了理解文档并赋予其某种身份。

样本文件:
POST mycars/_doc/1
{
"owner": "john",
"cars":[
{
"type": "Ford",
"purchase_date": "2017-01-01"
},
{
"type": "Tesla",
"purchase_date": "2019-01-01"
}

]
}

POST mycars/_doc/2
{
"owner": "jess",
"cars":[
{
"type": "Ford",
"purchase_date": "2017-01-01"
}
]
}

POST mycars/_doc/3
{
"owner": "jenny",
"cars":[
{
"type": "Ford",
"purchase_date": "2019-01-01"
}
]
}

POST mycars/_doc/4
{
"owner": "tom",
"cars":[
{
"type": "Ford",
"purchase_date": "2016-01-01"
}
]
}

现在您的查询是:给我所有购买日期小于或等于“特定时间点”且模型为“福特”的人

我有前两个和最后一个文档,属于日期 2017-01-01的查询

因此,下面的查询是我所拥有的 给了我所有在Ford或之前购买2018-01-01的人,而在2018-01-01 之后没有购买其他汽车的人

查询:
POST mycars/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "cars",
"query": {
"bool": {
"must": [
{
"match": {
"cars.type.keyword": "Ford"
}
},
{
"range": {
"cars.purchase_date": {
"lte": "2018-01-01"
}
}
}
]
}
}
}
}
],
"must_not": [
{
"nested": {
"path": "cars",
"query": {
"bool": {
"must": [
{
"range": {
"cars.purchase_date": {
"gte": "2018-01-01"
}
}
}
]
}
}
}
}
]
}
}
}

我添加了 must_not子句,以便过滤用户在 must子句中提到的日期之后最终购买任何其他汽车的文档。

请注意,我只对嵌套文档使用了 Bool查询和 Range查询。

希望这可以帮助!

关于elasticsearch - Elasticsearch 嵌套查询-如何仅基于嵌套文档的第一个实例进行过滤以回答过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57453712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com