正如标题所指出的,我试图进行一个查询,该查询不返回整个文档,而仅返回某些字段,但具有多个确切术语。 我使用了来自laravel的Guzzle来构造我的查询:
$response = $client->post('cvr-permanent/_search', [
'auth' => ['USERNAME', 'PASSWORD'],
'json' => [
"_source" => ["Vrvirksomhed.attributter", "Vrvirksomhed.deltagerRelation.organisationer.medlemsData.attributter"],
"query" => [
"bool"=> [
"must"=> [
[
"term"=> [
"Vrvirksomhed.cvrNummer" => $vat
]
]],
"must_not"=> [ ],
"should"=> [ ]
]
],
"from"=> 0,
"size"=> 10,
"sort"=> [ ]
]
]);
我想要来自Vrvirksomhed.cvrNummer
的数据,而我想要的数据是Vrvirksomhed.attributter.type => "KAPITAL"
和Vrvirksomhed.deltagerRelation.deltager.navne
的位置以及Vrvirksomhed.deltagerRelation.organisation.attributter.type = "EJERANDEL_PROCENT"
的位置
我对如何使此查询有效感到非常困惑,因为它是多个术语,但实际上不是。对Elasticsearch来说也很新。 我尝试了“术语”,但无法真正发挥作用。 我在上面进行的查询返回了我不需要的太多数据,而不是我需要的所有数据。
希望可以为您提供帮助
**编辑
也许是这样,但已翻译为elasticsearch
SELECT attributter.type": "KAPITAL" AND deltagerRelation.deltager.navne AND deltagerRelation.organisation.attributter.type": "EJERANDEL_PROCENT FROM Vrvirksomhed WHERE cvrNummer = $vat
***编辑 希望更多的澄清:
好的,对不起,请尝试将其弄清楚。我想要的对象是具有一定增值税号的公司。 Vrvirksomhed.cvrNummer
就是这个,那必须是术语。它返回一个巨大的对象,其中包含如此多的数组。我不想要所有这些数据,而只是其中一些。我从这个大对象中需要的数据是数组Vrvirksomhed.attributter
中具有type : "KAPITAL
字段的对象,而不是所有属性。然后我想要Vrvirksomhed.deltagerRelation.deltager.navne
,只需将其放在_source
中就可以了,因为我想要所有这些对象。但是然后我想要Vrvirksomhed. deltagerRelation.organisation.attributter
还是数组attributter
中的一堆对象,但是我只想要带有type : "EJERANDEL_PROCENT
所以我不能真正将它们添加为附加的“术语”,因为唯一的真实术语是“ cvrNummer”,其他所有内容都只是过滤响应。我尝试使用过滤器等,但无济于事
这里有一个pastebin,所以您可以看到我正在处理的clusterfuck。到目前为止,这是我能够对它进行排序的方法,只需将它们放在_source
中,而无需对“ KAPITAL”和“ EJERANDEL_PROCENT”进行额外的“过滤”
https://pastebin.com/b8hWWz1R
答案 0 :(得分:1)
您只想获取符合多个条件的文档,并且只需要这些文档中的一部分字段,对吗?
在SQL中(带有一些字段名称和结构的自由度),您的查询将类似于:
SELECT cvrNummer
FROM Vrvirksomhed
WHERE attributter_type = 'KAPITAL'
AND deltagerRelation_deltager_navne = 'you left this out in your question'
AND deltagerRelation_organisation_attributter_type = 'EJERANDEL_PROCENT'
如the Elasticsearch Guide †中所述,Elasticsearch中的等效条件是一个查询,其中包含所有条件的bool
clause和一个{ {1}} parameter指出您想在响应中返回哪些字段。类似于以下内容:
_source
†请注意,本指南中的语法适用于Elasticsearch2.x。当前版本为7.x,此后发生了很多变化!
{
"_source": ["cvrNummer"]
"query": {
"bool": {
"must": [
{ "term": "attributter.type": "KAPITAL" },
{ "term": "deltagerRelation.deltager.navne": "you left this out in your question" },
{ "term": "deltagerRelation.organisation.attributter.type": "EJERANDEL_PROCENT" }
]
}
}
}
查询的信息,请参见https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html;