gpt4 book ai didi

mysql - 如何获取至少具有 Elasticsearch 查询中指定的属性的所有文档?

转载 作者:行者123 更新时间:2023-11-29 07:42:34 26 4
gpt4 key购买 nike

是否可以从索引中选择一个与某个子项的多个值匹配的项?我认为这不是很清楚,但我在下面添加了更多详细信息。

我有以下索引:

{
"mappings" : {
"entity" : {
"properties" : {
"name" : {"type" : "string"},
"features" : {
"type" : "nested",
"include_in_parent" : false,
"properties" : {
"id" : {"type" : "integer"},
"value_int" : {"type" : "integer"},
"value_text" : {"type" : "string"},
"value_decimal" : {"type" : "integer"}<br/>
}
}
}
}
},
"settings" : {
"number_of_shards" : 1,
"number_of_replicas" : 0
}
}

索引中的一些项目

{
"name" : "Bazar",
"features" : [
{
"id" : 1,
"value_text" : null,
"value_decimal" : null,
"value_int": 51
},
{
"id" : 9,
"value_text" : "Amsterdam",
"value_decimal" : null,
"value_int": null
}
]

}

{
"name" : "Bazar Test",
"features" : [
{
"id" : 1,
"value_text" : null,
"value_decimal" : null,
"value_int": 52
},
{
"id" : 9,
"value_text" : "Leiden",
"value_decimal" : null,
"value_int": null
}
]

}

{
"name" : "Bazar no city",
"features" : [
{
"id" : 1,
"value_text" : null,
"value_decimal" : null,
"value_int": 51
},
]

}

我需要一种方法来查找具有 features.id = 1 和 features.id = 2 的项目(例如:“Bazar”和“Bazar Test”项目)。

我得到的查询是

{
"query" : {
"nested" : {
"path" : "features",
"query" : {
"bool" : {
"must" : [
{ "terms" : { "features.id" : [1, 9]} }
]
}
}
}
}

}

此查询的问题在于,它选择了 features.id = 1 或 features.id = 9 的项目,因此返回所有项目。

编辑尝试了新的查询

{
"query" : {
"nested" : {
"path" : "features",
"query" : {
"bool" : {
"must" : [
{ "terms" : {
"features.id" : [1, 9],
"minimum_should_match": 2
}
}
]
}
}
}
}

}

但我没有得到任何结果。

编辑:

合并答案后,我设法让它发挥作用。谢谢您的帮助:)

这是我的查询(稍作修改)

{
"from": 0,
"size": 20,
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"match_phrase_prefix": {
"title": {
"query": "deli",
"max_expansions": 5
}
}
},
{
"match": {
"entity_type_id": 5
}
}
]
}
},
"filter": {
"and": {
"filters": [
{
"nested": {
"path": "features",
"query": {
"bool": {
"must": [
{
"match": {
"features.id": 31
}
},
{
"match": {
"features.value_int": {
"query": [
56, 57
],
"operator": "and"
}
}
}
]
}
}
}
}
]
}
}
}
}

}

谢谢。

最佳答案

match 查询支持 bool operator 参数。您还应该将查询包装在嵌套查询中,因为features字段嵌套在您的映射中。

尝试这个查询:

{
"query": {
"nested": {
"query": {
"match": {
"features.id": {
"query": "1 9",
"operator": "and"
}
}
},
"path": "features"
}
}
}

关于mysql - 如何获取至少具有 Elasticsearch 查询中指定的属性的所有文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28631209/

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