如果函数值改变,则添加到新数组中

时间:2019-05-12 16:59:41

标签: json angular typescript

我通过点击复选框过滤搜索查询。我有不同的复选框。全部使用相同的功能来添加和删除我的查询版本。 我将值存储在数组中,并格式化它们以进行查询。

我正在使用Elasticsearch进行查询和angular7。

enter image description here

onChangeLocations(value: string, checked: boolean) {


    if (checked) {

      this.selectedLocations.push(value);

      this.selectedTopics.push({
        'match_phrase': { '134_facet_locations': value },
      });
      this.selectedTopics.push({
        'match_phrase': { '135_facet_locations': value },
      });
      this.selectedTopics.push({
        'match_phrase': { '136_facet_locations': value },
      });

    } else { 
this.selectedTopics = this.selectedTopics.filter((topic: any) => {
        return topic.match_phrase['134_facet_locations'] !== value;
      });
      this.selectedTopics = this.selectedTopics.filter((topic: any) => {
        return topic.match_phrase['135_facet_locations'] !== value;
      });
      this.selectedTopics = this.selectedTopics.filter((topic: any) => {
        return topic.match_phrase['136_facet_locations'] !== value;
      });


      this.selectedLocations = this.selectedLocations.filter((facet: any) => {
        return facet !== value;
      });

    }
 }

这是我的输出,适用于OR查询。

[
    {
        "bool": {
            "should": [
                {
                    "match_phrase": {
                        "134_facet_locations": "Deutschland"
                    }
                },
                {
                    "match_phrase": {
                        "135_facet_locations": "Deutschland"
                    }
                },
                {
                    "match_phrase": {
                        "136_facet_locations": "Deutschland"
                    }
                },
                {
                    "match_phrase": {
                        "134_facet_locations": "Basel"
                    }
                },
                {
                    "match_phrase": {
                        "135_facet_locations": "Basel"
                    }
                },
                {
                    "match_phrase": {
                        "136_facet_locations": "Basel"
                    }
                }
            ]
        }
    }
]

我需要一个输出,查询必须如下所示:

  {
    "should": [
        {
            "bool": {
                "should": [
                    {
                        "match_phrase": {
                            "134_facet_locations": "Basel"
                        }
                    },
                    {
                        "match_phrase": {
                            "135_facet_locations": "Basel"
                        }
                    },
                    {
                        "match_phrase": {
                            "136_facet_locations": "Basel"
                        }
                    }
                ]
            }
        },
        {
            "bool": {
                "should": [
                    {
                        "match_phrase": {
                            "134_facet_locations": "Deutschland"
                        }
                    },
                    {
                        "match_phrase": {
                            "135_facet_locations": "Deutschland"
                        }
                    },
                    {
                        "match_phrase": {
                            "136_facet_locations": "Deutschland"
                        }
                    }
                ]
            }
        }

    ]

}

我知道如何将它们一次添加到数组中。但是我不知道如何以一种很好的方式构建这个复杂的json查询。

1 个答案:

答案 0 :(得分:0)

这是我对答案的建议。我必须检查值是否更改。如果更改,则将主题添加到新的“布尔应”数组中。像这样的东西。