gpt4 book ai didi

elasticsearch - 查询嵌套对象时,Elasticsearch查询无法返回结果

转载 作者:行者123 更新时间:2023-12-03 00:53:45 25 4
gpt4 key购买 nike

我有一个看起来像这样的对象:

{
"id": 123,
"language_id": 1,
"label": "Pablo de la Pena",
"office": {
"count": 2,
"data": [
{
"id": 1234,
"is_office_lead": false,
"office": {
"id": 1,
"address_line_1": "123 Main Street",
"address_line_2": "London",
"address_line_3": "",
"address_line_4": "UK",
"address_postcode": "E1 2BC",
"city_id": 1
}
},
{
"id": 5678,
"is_office_lead": false,
"office": {
"id": 2,
"address_line_1": "77 High Road",
"address_line_2": "Edinburgh",
"address_line_3": "",
"address_line_4": "UK",
"address_postcode": "EH1 2DE",
"city_id": 2
}
}
]
},
"primary_office": {
"id": 1,
"address_line_1": "123 Main Street",
"address_line_2": "London",
"address_line_3": "",
"address_line_4": "UK",
"address_postcode": "E1 2BC",
"city_id": 1
}
}

我的Elasticsearch映射如下所示:
"mappings": {
"item": {
"properties": {
"office": {
"properties": {
"data": {
"type": "nested",
}
}
}
}
}
}

我的Elasticsearch查询看起来像这样:
GET consultant/item/_search
{
"from": 0,
"size": 24,
"query": {
"bool": {
"must": [
{
"term": {
"language_id": 1
}
},
{
"term": {
"office.data.office.city_id": 1
}
}
]
}
}
}

这将返回零结果,但是,如果我删除第二个 term并将其仅保留在 language_id子句中,则它将按预期工作。

我敢肯定,这归结为我对嵌套对象如何展平的误解,但是我没有主意-我已经尝试了查询和映射的各种排列。

任何指导深表感谢。我正在使用Elasticsearch 6.1.1。

最佳答案

我不确定您是否需要整个记录,此解决方案是否提供每条具有language_id:1并具有office.data.office.id:1值的记录。

GET consultant/item/_search
{
"from": 0,
"size": 100,
"query": {
"bool":{
"must": [
{
"term": {
"language_id": {
"value": 1
}
}
},
{
"nested": {
"path": "office.data",
"query": {
"match": {
"office.data.office.city_id": 1
}
}
}
}
]
}
}
}

我在测试索引中放入了3条不同的记录,以防误击,其中一条具有不同的language_id,另一条具有不同的Office ID,只有匹配的一条返回。
如果您只需要办公室数据,那有点不同,但是仍然可以解决。

关于elasticsearch - 查询嵌套对象时,Elasticsearch查询无法返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48187199/

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