elasticsearch - 仅返回匹配的数组项,而不是ElasticSearch中的所有文档值

标签 elasticsearch search magento2

我是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种不同的产品(想象ModelXXX是产品)。

如果可以的话,我真的想避免结构更改,因为新索引是在重新索引过程中自动创建的(我现在正在使用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/

相关文章:

php - Manjaro (Arch Linux) 上的 Magento 2 安装 ~ 缺少 php 扩展

autocomplete - 如何使用查询dsl(elasticsearch)实现自动完成查询?

elasticsearch - 如何使用 elasticsearch 5.2.1 配置 Spring Boot?

php - 使用 PHP MYSQL 搜索查询搜索搜索的每个单词

algorithm - 插值搜索有时间复杂度还是空间复杂度?

php - Magento 2 - 如何在另一个 phtml 文件、xml 布局、静态 block 和 cms 页面中调用自定义 phtml 文件?

java - 为什么我的 Elasticsearch 集成测试有时只能工作

performance - 了解Elasticsearch慢查询日志格式

search - 通过术语弹性​​搜索限制过滤器

linux - Azure 应用服务 Linux PHP - 如何将 "--with-freetype-dir=/usr/lib/x86_64-linux-gnu"添加到 "./configure"?