gpt4 book ai didi

elasticsearch - 在Elasticsearch中具有完全匹配的 bool AND

转载 作者:行者123 更新时间:2023-12-03 01:47:24 25 4
gpt4 key购买 nike

在我们的Elasticsearch产品集合中,我们有一系列称为“营养素”的哈希。数据的部分示例为:

"_source": {
"quantity": "150.0",
"id": 1001,
"barcode": "7610809001066",
"nutrients": [
{
"per_hundred": "1010.0",
"name_fr": "Énergie",
"per_portion": "758.0",
"name_de": "Energie",
"per_day": "9.0",
"name_it": "Energia",
"name_en": "Energy"
},
{
"per_hundred": "242.0",
"name_fr": "Énergie (kCal)",
"per_portion": "181.0",
"name_de": "Energie (kCal)",
"per_day": "9.0",
"name_it": "Energia (kCal)",
"name_en": "Energy (kCal)"
},
{
"per_hundred": "18.0",
"name_fr": "Matières grasses",
"per_portion": "13.5",
"name_de": "Fett",
"per_day": "19.0",
"name_it": "Grassi",
"name_en": "Fat"
},

在搜索中,我们正尝试根据养分数组中包含的两个字段的精确匹配来带回产品。我发现的是条件似乎是OR而不是AND。

两次尝试是:
   "query": {
"bool": {
"must": [
{ "match": { "nutrients.name_fr": "Énergie" } },
{ "match": { "nutrients.per_hundred": "242.0" } }
]
}
}
}


  "query": {
"filtered": {
"filter": {
"and": [
{ "term": { "nutrients.name_fr": "Énergie" } },
{ "term": { "nutrients.per_hundred": "242.0" } }
]
}
}
}

实际上,这两个都带回了Énergie和242.0的条目,但是在不同的name_fr上也匹配,例如:
    {
"per_hundred": "242.0",
"name_fr": "Acide folique",
"per_portion": "96.0",
"name_de": "Folsäure",
"per_day": "48.0",
"name_it": "Acido folico",
"name_en": "Folic acid"
},

它们也在非完全匹配上进行匹配,即:当我们只想在“Énergie”上进行匹配时,也在“Énergie(kCal)”上进行匹配

最佳答案

关于第一个问题:
您必须使营养字段嵌套,以便可以查询其中的每个对象本身的Elasticsearch Nested Objects

关于elasticsearch - 在Elasticsearch中具有完全匹配的 bool AND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42831863/

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