elasticsearch 分数 max_score =-1

elastichsearch score max_score =-1

当我向下面的 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
}

转max_score=-1

return在下方;

{
  "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

谢谢大家

你快到了。在你的脚本中你需要改变这个:

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

脚本中的 doc['_id'] 类型为 org.elasticsearch.index.fielddata.ScriptDocValues.Strings and when you call an .indexOf() 它需要 java.lang.String.

为什么我得到 max_score=-1?

因为indexOf()没有找到对应的列表元素

粗略地说,无痛语言是一种基于沙盒Java的脚本语言,因此它继承了大部分Java行为。在这种情况下,indexOf() 遍历 StringList 并调用 .equals():

Returns the index of the last occurrence of the specified element in this list, or -1 if this list does not contain the element. More formally, returns the highest index i such that (o==null ? get(i)==null : o.equals(get(i))), or -1 if there is no such index.

.equals() 通常依次实现,因此当且仅当两个对象具有相同类型时 returns 为真。

在我们的例子中,添加 .value 就足够了,因此文档的 ID 将作为 String.

返回

希望对您有所帮助!