Arrays 仅当值位于数组的第一行时,数组中字段上的匹配才会匹配
我有一个包含文档的索引,其中包含一个名为products的对象数组。Products有一个名为feed_id的字段,我将其映射为Arrays 仅当值位于数组的第一行时,数组中字段上的匹配才会匹配,arrays,
elasticsearch,Arrays,
elasticsearch,我有一个包含文档的索引,其中包含一个名为products的对象数组。Products有一个名为feed_id的字段,我将其映射为Products.feed_id(Text) 但是当我进行匹配查询时,我只找到匹配的提要id位于数组第一行的文档。我是否需要将产品映射为嵌套的(我尝试过,但它还不起作用,我是否也需要映射数组中的字段?) 我添加了映射/查询和一个未找到的示例文档。(如果feed_id是数组的第1行,则会找到其他文档) 映射 { "products-nl" : { "aliases"
Products.feed_id
(Text)
但是当我进行匹配查询时,我只找到匹配的提要id位于数组第一行的文档。我是否需要将产品映射为嵌套的(我尝试过,但它还不起作用,我是否也需要映射数组中的字段?)
我添加了映射/查询和一个未找到的示例文档。(如果feed_id是数组的第1行,则会找到其他文档)
映射
{
"products-nl" : {
"aliases" : { },
"mappings" : {
"product" : {
"dynamic" : "false",
"properties" : {
"brand" : {
"type" : "text"
},
"brand_keyword" : {
"type" : "keyword"
},
"description_short" : {
"type" : "text"
},
"eancode" : {
"type" : "text"
},
"full_title" : {
"type" : "text"
},
"price" : {
"type" : "float"
},
"products" : {
"properties" : {
"category_string" : {
"type" : "text"
},
"feed_id" : {
"type" : "integer"
},
"full_shop_title" : {
"type" : "text"
},
"shop_title" : {
"type" : "keyword"
},
"shop_title_search" : {
"type" : "text"
},
"title" : {
"type" : "text"
}
}
},
"providers" : {
"type" : "nested"
},
"shop_amount" : {
"type" : "integer"
},
"shop_title_search" : {
"type" : "text"
},
"timestamp" : {
"type" : "date"
},
"title" : {
"type" : "keyword"
},
"total_price" : {
"type" : "float"
}
}
}
},
"settings" : {
"index" : {
"creation_date" : "1547042901221",
"number_of_shards" : "5",
"number_of_replicas" : "0",
"uuid" : "OUXvA4kiTJCs1L30ZoYv1w",
"version" : {
"created" : "6050499"
},
"provided_name" : "products-nl"
}
}
}
}
查询
GET products-nl/_search
{
"size": 3000,
"query": {
"match": {
"products.feed_id": 15621
}
}
}
文档(应该可以找到它,因为feed_id在那里,但在产品的第3行)
}我认为原因是(1)您禁用了动态映射,(2)您的
产品的结构与定义的映射不匹配。因此,即使字段出现在\u source
字段()中,也不会对其进行索引(即,不可搜索)
让我更准确地说。产品
项的映射将与以下内容匹配:
"products": [
{
"title": "Disney Frozen 18 Inch 28 cm Meisjes Terugtraprem Mintgroen",
"feed_id": "53"
},
...
{
"title": "Kinderfiets 18 Inch Meisjes Disney Frozen 51861",
"feed_id": "15621"
},
...
]
相反,您有以下内容:
"products": {
"0": {
"title": "Disney Frozen 18 Inch 28 cm Meisjes Terugtraprem Mintgroen",
"feed_id": "53"
},
...
"3": {
"title": "Kinderfiets 18 Inch Meisjes Disney Frozen 51861",
"feed_id": "15621"
},
...
}
,这是一个非常不同的映射。由于这些项目与映射不匹配,并且您已禁用动态映射,因此无法搜索产品
项目。谢谢Glenacota!这帮我修好了。在PHP中,我有一个对象数组,用数组填充数组会得到正确的结果!不必在产品上定义嵌套或任何其他奇怪的内容(供将来阅读本文的人使用)。只要把{改成{就行了。很高兴我能给你答案!
"products": {
"0": {
"title": "Disney Frozen 18 Inch 28 cm Meisjes Terugtraprem Mintgroen",
"feed_id": "53"
},
...
"3": {
"title": "Kinderfiets 18 Inch Meisjes Disney Frozen 51861",
"feed_id": "15621"
},
...
}