使用ES java库准备嵌套排序过滤器

时间:2015-02-14 09:53:17

标签: java sorting elasticsearch

前段时间我有issue with sorting results by one of values in nested documents。事实证明问题出在我的查询上。而不是:

"sort": [
   {
      "children.size": {
         "order": "desc",
         "nested_filter": {
            "term": {
               "id": 1
            }
         }
      }
   }
]

我正在使用:

"sort": [
    {
      "children.size": {
        "order": "asc",
        "nested_filter": {
          "nested": {
            "filter": {
              "term": {
                "id": 1
              }
            },
            "path": "children"
          }
        }
      }
    }
]

错误的查询受到ES库(elasticsearch-1.4.jar)生成的代码的强烈启发。这是我用来准备查询的排序部分的片段:

FieldSortBuilder mySort = SortBuilders.fieldSort("children.size")
              .setNestedFilter(FilterBuilders.nestedFilter("children", FilterBuilders.termFilter("id", myId)))
              .sortMode("avg")
              .order(SortOrder.ASC);    

当这样的“排序”添加到查询中时,最终结果是不正确的嵌套过滤器。

以错误的方式使用图书馆?我怎样才能轻松解决这个问题?

1 个答案:

答案 0 :(得分:2)

这个问题的答案出现在这里,但不知何故被删除了。无论如何,有人向我解释说我在方法setNestedFilter中使用了错误的过滤器 - 我不应该在那里提供嵌套过滤器,但它应该是一个术语过滤器。改变这似乎可以解决我的问题。