尝试从带有Elasticsearch的多个词的查询中获得过滤后的响应

时间:2019-05-09 12:35:40

标签: json laravel elasticsearch guzzle

正如标题所指出的,我试图进行一个查询,该查询不返回整个文档,而仅返回某些字段,但具有多个确切术语。 我使用了来自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

1 个答案:

答案 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,此后发生了很多变化!