我是Elasticsearch的新手。我的客户的搜索页面结果遇到了意外的行为,我的调查最终以ES结构结束。
我有一个文档字段name
,它具有以下映射:
"name": {
"type": "text",
"fields": {
"sort_name": {
"index": false,
"type": "keyword"
}
}
}
因此,通常,它具有一个值,因此,在这种情况下,它与查询正确匹配。但是有时候我有一个文档,其中包含一个产品名称数组,这导致将所有数组值都提取到搜索页面结果中。
例如,如果我有一个产品,看起来像这样:
{
...,
"name": [
"Tesla",
"Model",
"XXX"
]
}
因此,当我在
name
上搜索时:{
"from": 0,
"query": {
"bool": {
"must": [
{
"match": {
"name": "Tesla"
}
}
]
}
},
"size": 150,
"sort": [
{
"_score": {
"order": "desc"
}
}
],
"stored_fields": [
"_id",
"_score"
]
}
它返回以下内容:
"hits": {
"total": 1,
"max_score": 1.0,
"hits": [
{
"_index": "magento2_product_4_v2",
"_type": "document",
"_id": "99999",
"_score": 1.0,
"_source": {
"name": [
"Tesla",
"Model",
"XXX"
]
}
}
]
}
当我只需要
Tesla
时。结果,我将得到用户没有搜索的2种不同的产品(想象
Model
和XXX
是产品)。如果可以的话,我真的想避免结构更改,因为新索引是在重新索引过程中自动创建的(我现在正在使用Magento 2),那么您可以帮助我进行查询吗?
最佳答案
您的索引magento2_product_4_v2中有1个文档。
这是
{
...,
"name": [
"Tesla",
"Model",
"XXX"
]
}
提出要求后,您会收到此文档,因为此文档适合您的要求。
您可能要创建3个文档吗?
{
...,
"name": [
"Tesla",
]
}
{
...,
"name": [
"Model"
]
}
{
...,
"name": [
"XXX"
]
}
关于elasticsearch - 仅返回匹配的数组项,而不是ElasticSearch中的所有文档值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62117417/