我在 ES 中有一个文档,我可以通过名称、id 等进行查询。但是在文档内部我有一个数据数组,我现在也希望能够查询这些数据,但在文档中找不到任何解决方案。
那么,如果您想在数组中查找,查询会是什么样子呢?我的文档示例:
{
"bookId": "fa04d4e0-456f-4fdf-8bd5-a47af454b27d",
"authorId": "f35db7d6-e997-432c-9044-87b3cbcf87c0",
"name": "The art of War",
"searchWords": [],
"language": {
"code": "nl",
"name": "Nederlands"
},
"publicationDate": "2021-11-24T11:03:34+01:00",
"images": [
{
"id": "00000000-0000-0000-0000-000000000000",
"data": {
"name": "image1",
"url": null,
"fileExtension": null,
"fileSize": null,
},
"position": 0
},
{
"id": "00000000-0000-0000-0000-000000000000",
"data": {
"name": "image1",
"url": null,
"fileExtension": null,
"fileSize": null,
},
"position": 0
},
]
这是我查询例如名称的方式:
if (isset($query['name'])) {
$nameBoolQuery = new BoolQuery();
$nameBoolQuery->add(new WildcardQuery('name', strtolower($query['name']) . '*'), BoolQuery::SHOULD);
$nameBoolQuery->addParameter('minimum_should_match', 1);
$boolQuery->add($nameBoolQuery);
}
但是,如果我想查询我的一张图片的名称,这是行不通的:
if (isset($query['imageName'])) {
$nameBoolQuery = new BoolQuery();
$nameBoolQuery->add(new WildcardQuery('images.data.name', strtolower($query['keyword']) . '*'), BoolQuery::SHOULD);
$nameBoolQuery->addParameter('minimum_should_match', 1);
$boolQuery->add($nameBoolQuery);
}