Запрос Elasticsearch обнаруживает отсутствующие документы путем поиска после - PullRequest
0 голосов
/ 06 августа 2020

У меня небольшая проблема при запросе elasticsearch 6.8. У меня есть информация createdAt в документах, и я использую информацию createdAt с поиском после

Мой запрос:

{
  "from": 0,
  "size": 2500,
  "query": {
    "bool": {
      "filter": [
        {
          "bool": {
            "should": [
              {
                "bool": {
                  "must_not": [
                    {
                      "exists": {
                        "field": "uni",
                        "boost": 1
                      }
                    }
                  ],
                  "adjust_pure_negative": true,
                  "boost": 1
                }
              },
              {
                "match": {
                  "uni": {
                    "query": "false",
                    "operator": "OR",
                    "prefix_length": 0,
                    "max_expansions": 50,
                    "fuzzy_transpositions": true,
                    "lenient": false,
                    "zero_terms_query": "NONE",
                    "auto_generate_synonyms_phrase_query": true,
                    "boost": 1
                  }
                }
              }
            ],
            "adjust_pure_negative": true,
            "minimum_should_match": "1",
            "boost": 1
          }
        },
        {
          "exists": {
            "field": "pt",
            "boost": 1
          }
        }
      ],
      "should": [
        {
          "bool": {
            "must_not": [
              {
                "exists": {
                  "field": "del",
                  "boost": 1
                }
              }
            ],
            "adjust_pure_negative": true,
            "boost": 1
          }
        },
        {
          "match": {
            "del": {
              "query": false,
              "operator": "OR",
              "prefix_length": 0,
              "max_expansions": 50,
              "fuzzy_transpositions": true,
              "lenient": false,
              "zero_terms_query": "NONE",
              "auto_generate_synonyms_phrase_query": true,
              "boost": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "minimum_should_match": "1",
      "boost": 1
    }
  },
  "_source": {
    "includes": [
      "did",
      "ca"
    ],
    "excludes": []
  },
  "sort": [
    {
      "ca": {
        "order": "asc"
      }
    }
  ],
  "search_after": [
    1596545647769
  ]
}

У меня есть 100k документов, но таким образом я получаю 99,996 документов проблема в том, что totalHits показывает 100000, но когда я запрашиваю кибану, он дает мне последнюю партию как 4 отсутствующих документа. Например, я получаю свои документы как 2500 пакетов документов, в последнем он должен быть от 97.500 до 100.000, но он дает мне 99.996.

Когда я делаю тот же запрос с api прокрутки поиска с пакетами 2500 документов, он дает мне 100 000 документов.

Примечание. Если я использую прокрутку поиска, я использую клавишу прокрутки, чтобы продолжить. Если я использую поиск после, я использую информацию createdAt для получения следующих документов. Что может вызвать эту проблему?

1 Ответ

1 голос
/ 07 августа 2020

Если есть какие-либо документы, которые могут содержать точно такое же значение для поля ca, тогда решением было бы просто использовать другое поле прерывателя t ie в предложении sort, чтобы два документа с одинаковыми ca значение может быть отсортировано правильно.

Вот так:

  "sort": [
    {
      "ca": {
        "order": "asc"
      }
    },
    {
      "tie_breaker_field": {
        "order": "asc"
      }
    }
  ],
...