如标题所述,我试图进行一个查询,该查询不返回整个文档,而仅返回某些字段,但具有多个确切术语。
我使用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”,其他所有内容都只是过滤响应。我尝试使用过滤器等,但无济于事
这是一个粘贴框,因此您可以看到我正在处理的clusterfuck。到目前为止,这就是我能够将其排序为
_source
的内容,但没有对“KAPITAL”和“EJERANDEL_PROCENT”进行额外的“过滤”https://pastebin.com/b8hWWz1R
最佳答案
您只想获取符合多个条件的文档,并且只需要这些文档中的一部分字段,对吗?
在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,其中包含您的所有条件;一个_source
parameter,它指示您要在响应中返回的字段。类似于以下内容:{
"_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" }
]
}
}
}
†请注意,本指南中的语法适用于Elasticsearch2.x。当前版本是7.x,此后发生了许多变化!
bool
查询的信息,请参见https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html。 关于json - 尝试从带有Elasticsearch的多个术语的查询中获取过滤后的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56059595/