elasticsearch-py不能使用script_score进行查询

时间:2015-04-17 10:38:41

标签: python elasticsearch pyelasticsearch

我目前正在尝试通过Python查询ES,使用elasticsearch-py但没有成功......我正在测试“elasticsearch-head”插件上的请求并且工作正常(结果得分)

然而,当我在Python中使用某些内容时似乎有些错误,虽然我得到了相同的结果,但它们没有得到正确的评分......

这是代码:

custom_query={
  "query": {
    "function_score": {
      "query": {
        "match_all": {}
      },
      "functions": [
        {
          "script_score": {
            "lang": "groovy", 
            "script": "_score+20",
            "params":{"myMap":{}}
          }
        }
      ]
    }
  }
}

这是我的自定义查询,非常简单,只是为了测试评分机制。

src = es.search(index=['test'],scroll='60s',search_type='scan',size=10,body=custom_query)

现在我测试一下:

while(1):
    src = es.scroll(scroll_id=sid, scroll='60s')
    sid = src['_scroll_id']
    kws.extend(src['hits']['hits'])

所有这些都给出了一组不正确评分的结果......我甚至启用了“_explanation”来理解脚本是否被利用...... 这意思是:   - “_score”始终为0   - “_explanation”表示如下:

{
    'description': 'function score',
    product of:'',
        'value': 21.0,
        'details': [
            {
                'description': 'ConstantScore(*:*)',
                product of:'',
                    'value': 1.0,
                    'details': [
                        {'description': 'boost', 'value': 1.0}, {'description': 'queryNorm', 'value': 1.0}
                    ]
            },
            {
                'description': 'Math.min of',
                'value': 21.0,
                'details': [
                    {
                        'description': 'script score function',
                        computed with script:"return _score+30;" and parameters: \n{myMap={}}', 'value': 21.0
                    },
                    {
                        'description': 'maxBoost',
                        'value': 3.4028235e+38
                    }
                ]
            },
            {
                'description': 'queryBoost',
                'value': 1.0
            }
        ]
}

1 个答案:

答案 0 :(得分:0)

似乎问题在于ElasticSearch本身......“搜索类型”:“扫描”不允许对多个结果进行评分。

here

提供了有关该问题的更全面的解释