Соответствие двум критериям для фильтра в Elasticsearch

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

0
задан Alejandro Rt 6 April 2019 в 00:14
поделиться

1 ответ

Я не могу комментировать или отправлять сообщения напрямую, но можете ли вы дать дополнительные разъяснения?

Я попытался воссоздать проблему, поскольку ваш первый пример поиска должен работать так, как ожидалось. Чтобы подтвердить это, я создал простой индекс и добавил несколько записей для проверки различных предоставленных вами запросов:

POST demo/_doc
{
  "created_at": "2019-04-02T12:00:00.000Z",
  "comment": "contains comment"
}

POST demo/_doc
{
  "created_at": "2019-04-03T12:00:00.000Z",
  "comment": "contains another comment"
}

POST demo/_doc
{
  "created_at": "2019-04-03T12:00:00.000Z",
  "comment": "not what we are looking for"
}

Примечание. Я не беспокоился о пользовательском анализаторе, поскольку ваши отдельные запросы указывают отдельные поиски работают правильно, так что это не должно иметь никакого влияния.

После этого тестирование отдельных запросов дало ожидаемые результаты, а тестирование исходного запроса, который вы предоставили, также дало ожидаемые результаты:

Запрос:

GET demo/_search
{
  "from": 0,
  "size": 10,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "comment": "comment"
          }
        },
        {
          "range": {
            "created_at": {
              "gte": "2019-04-03T00:00:00.000Z"
            }
          }
        }
      ]
    }
  }
}

Результат:

{
  "took" : 17,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.287682,
    "hits" : [
      {
        "_index" : "demo",
        "_type" : "_doc",
        "_id" : "-sxo72kBwpqm-gdssSYh",
        "_score" : 1.287682,
        "_source" : {
          "created_at" : "2019-04-03T12:00:00.000Z",
          "comment" : "contains another comment"
        }
      }
    ]
  }
}

Единственная возможность, которая выпадает на меня, это то, что вы указали в своем последнем утверждении, что есть посты, созданные «после 3 марта с текстом комментария в поле комментария», которые вы создали, но запросы фактически ищут посты с текстом комментария в поле для комментариев после апреля 3-го. Однако это вполне может быть опечаткой.

В качестве альтернативы, поскольку ваш второй запрос возвращает только 19 обращений (диапазон дат с просмотром поля created_at), вы можете просмотреть их, найти поле с комментарием, содержащим текст comment, и вставить его или фрагмент этого?

0
ответ дан James Pittiglio 6 April 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: