我是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,所以您可以帮助我进行查询吗?
我是Elasticsearch的新手。我的客户的搜索页面结果遇到了意外的行为,我的调查最终以ES结构结束。我有一个文档字段名称,它具有此名称...
您的索引magento2_product_4_v2中有1个文档。这是>
{
...,
"name": [
"Tesla",
"Model",
"XXX"
]
}