自定义过滤器为弹性搜索提供查询,给出解析错误

时间:2014-05-19 16:02:39

标签: elasticsearch

它告诉我没有注册[custom_filters_score]的查询];

这是基本形式的代码:

  "query": {
    "custom_filters_score": {
      "query": {
        "match_all": {}
      },
      "filters": [
        {
          "filter": {
            "exists": {
              "field": "salesrank"
            }
          }
          ,"script": "1 / doc['salesrank'].value"
        }
      ]
    }
  }
}

修改

我唯一注意到的工作是在第一个'查询'之后和'custom_filters_score'之前放置另一个查询。然后这给我留下了两个问题 - 不知道如何处理它们,但文档并没有说明这一点。 :(

我还必须摆脱'filters'数组,只使用'filter'对象。所以,我发现工作的唯一事情就是这样:

{
  "query": {
    "match_all": {}, 
    "custom_filters_score": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "exists": {
          "field": "salesrank"
        }
         ,"script": "1 / doc['salesrank'].value"
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

根据elasticsearch文档:http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/query-dsl-custom-filters-score-query.html," custom_filters_score"已被弃用。正确的方法是用" function_score"

替换它
{
  "query": {
    "function_score": {
      "functions": [
        {
          "script_score": {
            "script": "1 / doc['salesrank'].value"
          }
        }
      ],
      "query": {
        "match_all": {}
      },
      "filter": {
        "exists": {
          "field": "salesrank"
        }
      }
    }
  }
}