elastichsearch счет max_score = -1 - PullRequest
       49

elastichsearch счет max_score = -1

0 голосов
/ 16 октября 2018

когда я отправляю запрос наasticsearch ниже;

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

возврат ниже;

{
  "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 голосов
/ 17 октября 2018

Ты почти у цели.В вашем скрипте вам нужно изменить это:

  "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() не находит соответствующий элемент списка.

* 1018Грубо говоря, безболезненный язык является изолированным языком сценариев на основе Java, поэтому он наследует большую часть поведения Java.В этом случае indexOf() превышает List из String с и выполняет вызов .equals():

Возвращает индекс последнего вхожденияуказанный элемент в этом списке, или -1, если этот список не содержит элемент.Более формально, возвращает наивысший индекс i, такой что (o == null? Get (i) == null: o.equals (get (i))), или -1, если такого индекса нет.

И .equals(), в свою очередь, обычно реализуются, поэтому он возвращает true, если и только если оба объекта имеют одинаковый тип.

В нашем случае достаточно добавить .valueпоэтому идентификатор документа возвращается как String.

Надеюсь, это поможет!

...