弹性搜索嵌套多匹配查询



所以我的问题基本上与这里描述的相同,但是它仍然没有在组中得到回答。

我映射:

{
    "abstract": {
        "properties": {
            "summary": {
                "type": "string"
            }
        }
    },
    "authors": {
        "type": "nested",
        "properties": {
            "first_name": {
                "type": "string"
            },
            "last_name": {
                 "type": "string"
            }
        }
    }
}

我想对这两个字段执行全文搜索,可能权重不等。我想到的查询,但不幸的是不起作用,将是:

{
    "query": {
        "bool": {
            "should": [{
                "multi_match": {
                    "query": "higgs boson",
                    "fields": ["abstract.summary^5", "author.last_name^2"]
                }
            }]
        }
    }
}

我没有从authors字段得到任何结果,因为它的嵌套映射。我也无法摆脱嵌套属性-我将其用于聚合。有什么好的解决方法吗?

我设法找出的唯一解决方案,既不方便也不优雅,但不知怎么的工作是这样的查询:

"query": {
    "bool": {
        "should": [
            {
                "nested": {
                    "path": "authors",
                    "query": {
                        "multi_match": {
                            "query": "higgs",
                            "fields": ["last_name^2"]
                        }
                    }
                } 
            },
            {
                "multi_match": {
                    "query": "higgs",
                    "fields": ["abstract.summary^5"]
                }
            }
        ]
    }
}

我也不确定提升是否会像预期的那样工作,提供它在不同的查询中设置。

将您的映射更改为以下使用include_in_root: true的映射将允许您使用您最初编写的查询:

{
    "abstract": {
        "properties": {
            "summary": {
                "type": "string"
            }
        }
    },
    "authors": {
        "type": "nested",
        "include_in_root": true,
        "properties": {
            "first_name": {
                "type": "string"
            },
            "last_name": {
                 "type": "string"
            }
        }
    }
}

您可能希望将内部对象索引为嵌套字段和扁平对象字段。这可以通过将include_in_parent设置为true来实现。——链接

注意:在elasticsearch的未来版本中,include_in_root可能会被弃用,而copy_to会被使用。

相关内容

  • 没有找到相关文章

最新更新