假设像这样的结构
"_source": {
"title": "Example Document",
"versions": [
{
"page_id": "c5be72bb-dad2-4a66-969e-47b4c8bb47e9",
"page_slug": "example-page-slug",
"page_content": "this is an example of a matching string",
"software_version": "2.0.0",
},
{
"page_id": "2c24ffed-4f5b-471b-9def-595841912378",
"page_slug": "example-page-slug",
"page_content": "this is an example of a matching string",
"software_version": "2.2.0",
},
{
"page_id": "d1fa81c7-ad6a-4fb9-90e4-b146bd223530",
"page_slug": "example-page-slug",
"page_content": "this is a slightly different matching string",
"software_version": "2.6.0",
}
]
}
我发送的查询查看versions.page_content
进行比赛,因此在这种情况下(请原谅我使用PHP LIB(
[ 'nested' => [
'path' => 'versions',
'query' => [
'query_string' => [
'fields' => [ 'versions.page_content'],
'query' => $q
]
]
]
]
这可以正常工作,这完全按照我最初的意图
工作问题是,人们对在结果页面中看到可选版本的不包含所搜索内容感到非常烦恼。
所以如果我寻找"of a matching" example
截至目前,整个结构已返回,我将其列出在我们的搜索结果页面上。
我正在寻找的是,如果Elasticsearch有能力在查询中排除与不匹配的嵌套对象,所以我可以返回
"_source": {
"title": "Example Document",
"versions": [
{
"page_id": "c5be72bb-dad2-4a66-969e-47b4c8bb47e9",
"page_slug": "example-page-slug",
"page_content": "this is an example of a matching string",
"software_version": "2.0.0",
},
{
"page_id": "2c24ffed-4f5b-471b-9def-595841912378",
"page_slug": "example-page-slug",
"page_content": "this is an example of a matching string",
"software_version": "2.2.0",
}
]
}
相反还是我注定要在收到结果后必须在我的应用中手动执行此操作?
谢谢!
而不是query_string,也许您应该尝试bool查询。他们让您使用诸如必须带来不匹配值的所有内容之类的东西。
如果您只需要对象中的一些特定值,请使用_source。我不确定PHP是否让您使用它。但是,是的,您总是会从通话中得到一个奇怪的响应,您必须使用您的应用程序迭代它。
希望这有帮助!:D