ElasticSearch - 从不同的索引中获取不同的类型

时间:2017-11-16 09:41:44

标签: scala elasticsearch elastic4s

我有两个索引:AB

A有以下类型:carmotorbikevan

B有以下类型:buscarpickup

我希望能够从motorbike获得vanA以及来自car的{​​{1}}和pickup的单个查询

我想使用B来执行此操作,目前,我有:

filter

但很明显,这会为两个索引过滤.filter( not( should( termsQuery("key", Seq("car", "bus")) ) ) ) 。我知道我可以为每个索引做两个单独的查询,并为每个索引过滤不同的类型,但我想尽可能避免这种情况。

是否可以在单个查询中执行我要执行的操作?

2 个答案:

答案 0 :(得分:0)

你可以这样做。

GET _search
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "filter": [
              {
                "term": {
                  "_index": {
                    "value": "A"
                  }
                }
              },
              {
                "terms": {
                  "_type":  ["motorbike","van"]

                }
              }
            ]
          }
        },
        {
          "bool": {
            "filter": [
              {
                "term": {
                  "_index": {
                    "value": "B"
                  }
                }
              },
              {
                "terms": {
                  "_type": ["car","pickup"]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

答案 1 :(得分:0)

您可以使用特殊字段_index_type搜索索引和类型,因此一旦您知道这一点,只需将布尔查询放在一起。

  search("_all").query(
    boolQuery().should(
      boolQuery().must(
        termQuery("_index", "A"),
        termsQuery("_type", "motorbike", "van")
      ),
      boolQuery().must(
        termQuery("_index", "B"),
        termsQuery("_type", "car", "pickup")
      )
    )
  )