我试图通过内部命中工作来进行嵌套查询(使用bool-must)
基本上,它是必须的两个嵌套查询,但我似乎只是从一个分支获得内部命中,即使它必须是,所以两个分支都必须命中。
支持吗?
[这实际上是Python代码,但它基本上是json]
{
'size': 10,
'query': {
'bool': {
'must': [{
'nested': {
'path': 'attributes',
'score_mode':
'avg', 'inner_hits': {},
'query': {'bool': {
'must': [{'match': {'attributes.ename': 'n1'}},
{'match': {'attributes.sv': 'v1'}}]}}}},
{
'nested': {
'path': 'attributes',
'score_mode':
'avg',
'inner_hits': {},
'query': {'bool': {
'must': [{'match': {'attributes.ename': 'n2'}},
{'match': {'attributes.sv': 'v2'}}]}}}}]
}
}
}
答案 0 :(得分:1)
因此,您的第二个“ inner_hits”将覆盖第一个。您可以给每个人一个“名字”,以确保它们都返回:
{
'size': 10,
'query': {
'bool': {
'must': [{
'nested': {
'path': 'attributes',
'score_mode':
'avg', 'inner_hits': {'name': 'first'},
'query': {'bool': {
'must': [{'match': {'attributes.ename': 'n1'}},
{'match': {'attributes.sv': 'v1'}}]}}}},
{
'nested': {
'path': 'attributes',
'score_mode':
'avg',
'inner_hits': {'name': 'second'},
'query': {'bool': {
'must': [{'match': {'attributes.ename': 'n2'}},
{'match': {'attributes.sv': 'v2'}}]}}}}]
}
}
}
但是更好的方法可能是将整个事情简化为一个带有多个必须查询的嵌套查询。像这样:
{
'size': 10,
'query': {
'nested': {
'path': 'attributes',
'score_mode': 'avg',
'inner_hits': {},
'query': {
'bool': {
'must': [
{'match': {'attributes.ename': 'n1'}},
{'match': {'attributes.ename': 'n2'}},
{'match': {'attributes.sv': 'v1'}},
{'match': {'attributes.sv': 'v2'}}
]
}
}
}
}
}