elastichsearch得分max_score = -1

时间:2018-10-16 10:12:20

标签: elasticsearch elastic-stack elasticsearch-5

当我向下面的elasticsearch发送查询时

GET document_news/_search
{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must_not": [
            {
              "term": {
                "deleted_in_streams": "5b0cf5a038de881db68158ac"
              }
            }
          ],
          "must": [
            {
              "term": {
                "streams": "5b0cf5a038de881db68158ac"
              }
            },
            {
              "term": {
                "related_in_streams": "5b0cf5a038de881db68158ac"
              }
            },
            {
              "terms": {
                "_id": [
                  "r7Drd2YBzJMWvYRxjtYd",
                  "crDtd2YBzJMWvYRxRtcE",
                  "O7Dud2YBzJMWvYRxK9tF",
                  "lbDvd2YBzJMWvYRxZ-AP",
                  "GbDvd2YBzJMWvYRxX-BE",
                  "OrDvd2YBzJMWvYRxg-Lh",
                  "97Dwd2YBzJMWvYRxcOTe",
                  "1LDwd2YBzJMWvYRxXeMk",
                  "ErDxd2YBzJMWvYRxYunY",
                  "MLDxd2YBzJMWvYRxdeqy",
                  "NLDyd2YBzJMWvYRx3f1E",
                  "n7Dxd2YBzJMWvYRxketh",
                  "iLDzd2YBzJMWvYRxCP-q",
                  "-rDyd2YBzJMWvYRxR_RH",
                  "zrDxd2YBzJMWvYRx-vBO",
                  "_rHzd2YBzJMWvYRxNQG0",
                  "o7Dyd2YBzJMWvYRxL_OG",
                  "bLHzd2YBzJMWvYRxYQTk",
                  "xbDzd2YBzJMWvYRxDP_m",
                  "gLHzd2YBzJMWvYRxGQDz",
                  "ALHzd2YBzJMWvYRxtQkn",
                  "Q7Dyd2YBzJMWvYRxy_zE",
                  "H7Hzd2YBzJMWvYRxSgNQ",
                  "zbDyd2YBzJMWvYRx-v5y",
                  "ObHzd2YBzJMWvYRxFADi",
                  "NrHzd2YBzJMWvYRxbwXT",
                  "7rHzd2YBzJMWvYRxjwZ_",
                  "GbHzd2YBzJMWvYRxpAhx",
                  "I7Hzd2YBzJMWvYRx3At5",
                  "tLHzd2YBzJMWvYRx5gun",
                  "jLH0d2YBzJMWvYRxBw3P"
                ]
              }
            }
          ]
        }
      },
      "script_score": {
        "script": {
          "source": "params.sortOrder.indexOf(doc['_id'])",
          "lang": "painless",
          "params": {
            "sortOrder": [
              "r7Drd2YBzJMWvYRxjtYd",
              "crDtd2YBzJMWvYRxRtcE",
              "O7Dud2YBzJMWvYRxK9tF",
              "lbDvd2YBzJMWvYRxZ-AP",
              "GbDvd2YBzJMWvYRxX-BE",
              "OrDvd2YBzJMWvYRxg-Lh",
              "97Dwd2YBzJMWvYRxcOTe",
              "1LDwd2YBzJMWvYRxXeMk",
              "ErDxd2YBzJMWvYRxYunY",
              "MLDxd2YBzJMWvYRxdeqy",
              "NLDyd2YBzJMWvYRx3f1E",
              "n7Dxd2YBzJMWvYRxketh",
              "iLDzd2YBzJMWvYRxCP-q",
              "-rDyd2YBzJMWvYRxR_RH",
              "zrDxd2YBzJMWvYRx-vBO",
              "_rHzd2YBzJMWvYRxNQG0",
              "o7Dyd2YBzJMWvYRxL_OG",
              "bLHzd2YBzJMWvYRxYQTk",
              "xbDzd2YBzJMWvYRxDP_m",
              "gLHzd2YBzJMWvYRxGQDz",
              "ALHzd2YBzJMWvYRxtQkn",
              "Q7Dyd2YBzJMWvYRxy_zE",
              "H7Hzd2YBzJMWvYRxSgNQ",
              "zbDyd2YBzJMWvYRx-v5y",
              "ObHzd2YBzJMWvYRxFADi",
              "NrHzd2YBzJMWvYRxbwXT",
              "7rHzd2YBzJMWvYRxjwZ_",
              "GbHzd2YBzJMWvYRxpAhx",
              "I7Hzd2YBzJMWvYRx3At5",
              "tLHzd2YBzJMWvYRx5gun",
              "jLH0d2YBzJMWvYRxBw3P"
            ]
          }
        }
      }
    }
  },
  "sort": [
    {
      "_score": "desc"
    }
  ],
  "size": 31,
  "from": 0
}

turning max_score = -1

返回以下;

{
  "took": 6,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 31,
    "max_score": -1,
    "hits": [
      {
        "_index": "document_news",
        "_type": "doc",
        "_id": "1LDwd2YBzJMWvYRxXeMk",
        "_score": -1,
        "_source": {
          "image": "https://dummyimage.com/800x600",
          "original_url": "https://www.sener.org/home.html",
          "streams": [
            "5b0cf5a038de881db68158ac"
          ],
          "created_at": "2018-10-15T13:35:33.154171",
          "related_in_streams": [
            "5b0cf5a038de881db68158ac"
          ],
          "source": {
            "favicon": "https://placeholdit.imgix.net/~text?txtsize=55&txt=16x16&w=16&h=16",
            "name": "hayrioglu-bilge.com"
          },
          "is_streamed": true,
          "title": "Eum expedita facere ducimus illo.Ömer Çelik ab bakanı",
          "publish_date": "2018-10-15T16:35:33.152872",
          "is_crawled": false,
          "content": """
Cum pariatur nesciunt officiis praesentium. Ratione voluptatibus reprehenderit nam sit odio. Minima modi sint libero laudantium numquam ipsa.
Amet porro provident. Maxime distinctio minus numquam totam suscipit voluptatibus ducimus. In optio recusandae animi quam neque.
Voluptates possimus minus animi. Tempore nihil ullam voluptatibus. Ratione maxime aliquam distinctio.
Placeat quos optio aperiam. Corporis quam repudiandae fuga assumenda eligendi voluptates hic. Aperiam error provident labore quo quo id.
Quisquam maiores magni molestias rem laborum aspernatur. Dicta eveniet suscipit aliquid.Ömer Çelik ab bakanı

有人能帮助我我做错了什么吗? Elasticsearch-oss 6.3.1

谢谢

1 个答案:

答案 0 :(得分:0)

您快到了。在脚本中,您需要更改以下内容:

  "script_score": {
    "script": {
      "source": "params.sortOrder.indexOf(doc['_id'].value)", <=== add .value
      "lang": "painless",

发生的事情是脚本中的doc['_id']类型为org.elasticsearch.index.fielddata.ScriptDocValues.Strings,当您调用.indexOf()时,它期望的是java.lang.String

为什么我得到max_score = -1?

这是因为indexOf()找不到相应的列表元素。

粗略地说,无痛语言是一种基于Java的沙盒脚本语言,因此它继承了大多数Java行为。在这种情况下,indexOf()遍历List的{​​{1}}并调用String

  

返回指定元素中最后一次出现的索引   此列表;如果此列表不包含元素,则为-1。更多   形式上,返回最高索引i,使得(o == null?   get(i)== null:o.equals(get(i))),如果没有这样的索引,则为-1。

通常依次实现.equals(),因此,当且仅当两个对象具有相同的类型时,它才返回true。

在我们的例子中,添加.equals()就足够了,因此文档的ID将以.value的形式返回。

希望有帮助!