Elastic4s - 为一个术语找到多个精确值

Elastic4s - finding multiple exact values for one term

我正在尝试过滤一个术语以匹配数组中的一个值。

在 ES 上中继 https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_multiple_exact_values.html

 GET /my_store/products/_search
            {
                "query" : {
                    "filtered" : {
                        "filter" : {
                            "terms" : { 
                                "price" : [20, 30]
                            }
                        }
                    }
                }
            }

我试过这个:

    val res =  ESclient.execute {
        search in "index" query {
          filteredQuery query {
            matchall
          } filter {
                   termsFilter("category", Array(1,2))
          }
        }

但是从 ES 中得到一个错误。

我该怎么做?

调用 termsFilter 时,该方法需要 Any* 的 var args 调用,因此 termsFilter("category", 1, 2) 会起作用。但是 termsFilter("category", Array(1,2)) 被视为单个参数,因为 Array 当然是 Any 的子类。通过添加 : _ * 我们强制 scala 将其视为 vars arg 调用。

所以这会起作用:

val res =  ESclient.execute {
  search in "index" query {
    filteredQuery query {
      matchall
   } filter {
        termsFilter("category", Array(1,2) : _ *)
   }
}

也许最好的解决方案是更新客户端以在 Iterables 上过载。