所以我的问题基本上与这里描述的相同,但是它仍然没有在组中得到回答。
我映射:{
"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
会被使用。