【问题标题】:Matching Elasticsearch query across many fields跨多个字段匹配 Elasticsearch 查询
【发布时间】:2018-07-06 01:24:50
【问题描述】:

我有一堆产品存储在索引中。假设以下是单个产品的示例:

'productID' => 'sandbag'
'productName' => 'Bag of sand'
'productDescription' => 'A bag of sand'
'sizes' => array
    0 =>
        'sizeID' => '1wht'
        'sizeName' => '1 lb white'
    1 =>
        'sizeID' => '1blk'
        'sizeName' => '1 lb black'
    2 =>
        'sizeID' => '2wht'
        'sizeName' => '2 lb white'
    3 =>
        'sizeID' => '2blk'
        'sizeName' => '2 lb black'

black 1 lb 的 ElasticSearch 查询会显示该产品。但是,black 1 lb sand 的查询不会。

如果我将所有空格替换为 AND,则查询变为 black AND 1 AND lb AND sand,它会出现,但这似乎会杀死带引号的查询,例如 "1 lb black " 沙子

我的 ElasticSearch 查询如下所示:

"query": {
    "query_string": {
        "query": "black 1 lb sand",
        "default_operator": "AND",
        "fields": ["productName", "sizes.sizeName"]
    }
}

最终目标是能够在一个查询中匹配尺寸和产品名称(以及我想要的任何其他内容),并在客户需要时支持引用的短语(“1 lb black”)。

我不想将运算符切换到 OR,因为这会带来太多产品。

帮助?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    在阅读完文档后,我自己设法弄清楚了这一点。在这里为将来遇到相同问题的其他人发帖。

    只需将 'type' 设置为 'cross_fields',详见 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html#multi-match-types

    所以搜索查询变成:

    "query": {
        "query_string": {
            "query": "black 1 lb sand",
            "default_operator": "AND",
            "type": "cross_fields",
            "fields": ["productName", "sizes.sizeName"]
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      相关资源
      最近更新 更多