Нулевое поле поиска URI ElasticSearch

Мне нужно создать запрос через URI для фильтрации всех данных между двумя датами, а также, если это поле даты имеет значение NULL.

Например: у меня есть поле «Дата создания» в некоторых объектах, однако я хочу, чтобы в результате также не отображались объекты, которых нет в поле.

Я пробовал нечто подобное ниже:

http://localhost//elasticsearch/channels/channel/_search?q=channel.schedule.creation_date:[2018-06-19 TO 2018-12-22] OR channel.schedule.creation_date: NULL

Что касается сравнения дат в порядке, то работает. Проблема в том, чтобы получить значения NULL.

Отредактировано Исходный образец:

 "_source": {
                "channel": {
                    "activated": false,
                    "approved": false,
                    "content": "Jvjv",
                    "creation_date": "2018-06-21T13:06:10.000Z",
                    "facebookLink": "J jv",
                    "id": "Kvjvjv",
                    "instagramId": "Jvjv",
                    "name": "Kbkbkvk",
                    "ownerId": "sZtxdhiNbNY9sr2DtiCzlgJfsqb2",
                    "plan": 0,
                    "purpose": "Jvjv",
                    "recurrence": 1,
                    "segment": "Jvjvjv",
                    "twitterId": "Jvjv",
                    "youtubeId": "Jvj"
                }
            }
        }

person Vitor Darela    schedule 20.07.2018    source источник


Ответы (1)


Вы можете сделать это с помощью ограничения NOT(_exists_:field_name):

Вы можете это попробовать?

http://localhost//elasticsearch/channels/channel/_search?q=channel.schedule.creation_date:[2018-06-19 TO 2018-12-22] OR NOT(_exists_:channel.schedule.creation_date)
person Val    schedule 20.07.2018
comment
Спасибо за вашу помощь, я пробовал это, но не сработало - person Vitor Darela; 20.07.2018
comment
Можете ли вы показать документ, который возвращен, но не должен? - person Val; 20.07.2018
comment
На самом деле не возвращает, говорит, что не нашла никакого значения. но в моей базе данных сегодня это поле не существует, т.е. оно должно возвращать все данные. ВОЗВРАТ: {принято: 1, timed_out: false, _shards: {всего: 5, успешно: 5, пропущено: 0, не удалось: 0}, совпадений: {всего: 0, max_score: null, совпадений: []}} - person Vitor Darela; 20.07.2018
comment
Вы что-нибудь об этом знаете? - person Vitor Darela; 20.07.2018
comment
Кстати, если я попробую с этим: //elasticsearch/channels/channel/_search?q=(channel.schedule.creation_date:[2018-06-19 TO 2018-12-22]) ИЛИ (существует : channel.modification_date) работают хорошо, проблема когда ставить НЕ - person Vitor Darela; 20.07.2018
comment
В своем вопросе вы хотели протестировать поле creation_date, а не поле modification_date, может поэтому - person Val; 20.07.2018
comment
Нет, это просто Creation_date, я просто поместил Modification_date, чтобы проверить, работает ли exists, и функция работает. Проблема заключается в том, что предложение NOT при размещении не работает, как ожидалось, для фильтрации нулей. - person Vitor Darela; 20.07.2018
comment
Позвольте мне быть более ясным, это именно то, как я работаю: http://localhost//elasticsearch/channels/channel/_search?q=channel.schedule.creation_date:[2018-06-19 TO 2018-12-22] OR NOT(_exists_:channel.schedule.creation_date) если я не добавляю код, StackOverFlow удалите подчеркивание, но да, я поставил именно так, как вы мне показываете. - person Vitor Darela; 20.07.2018
comment
Хорошо, а как насчет моего вопроса в моем последнем комментарии? - person Val; 20.07.2018
comment
По поводу вашего последнего комментария ... Я поставил _exists_ именно так, как вы мне сказали ... посмотрите мой запрос - person Vitor Darela; 20.07.2018
comment
Нет, я имел в виду. Можете ли вы показать два документа, один из которых соответствует первому условию, а второй - второму? - person Val; 20.07.2018
comment
Извините, теперь я понял, что вы имеете в виду. с _exists_: { "took": 1, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 0, "max_score": null, "hits": [] } } вторая попытка с exist: { "took": 1, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 0, "max_score": null, "hits": [] } } - person Vitor Darela; 20.07.2018
comment
То же самое, но когда я удаляю НЕ, также используется только _exists_: return { "took": 2, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 181, "max_score": 1, "hits": [ { "_index": "channels", "_type": "channel", "_id": "-LEWNtPgMHEl8Ep-_DKD", "_score": 1, "_source": { - person Vitor Darela; 20.07.2018
comment
Но мне действительно нужно NULL, те, у которых нет этого поля. - person Vitor Darela; 20.07.2018
comment
NOT(_exists_) соответствует документам, которые либо не имеют поля, либо имеют поле, значение которого равно нулю. Меня интересует источник вашего документа, а не ответ, который вы получите. - person Val; 20.07.2018
comment
Еще одна вещь, когда я помещаю НЕ СУЩЕСТВУЕТ без моего диапазона дат (ИЛИ), например: http://localhost//elasticsearch/channels/channel/_search?NOT(_exists_:channel.schedule.creation_date) РАБОТАЕТ КАК ХОРОШО, но когда я помещаю ИЛИ с диапазоном дат, результаты не отображаются: http://localhost//elasticsearch/channels/channel/_search?q=channel.schedule.creation_date:[2018-06-19 TO 2018-12-22] OR NOT(_exists_:channel.schedule.creation_date) - person Vitor Darela; 20.07.2018
comment
Глядя на ваш источник, вы видите, что имя вашего поля channel.creation_date, а не channel.schedule.creation_date - person Val; 20.07.2018
comment
Но это именно то, что мне нужно .. У меня нет этого поля channel.schedule.creation_date в этой структуре, поэтому мне нужен поиск по ним .. channel.creation_date - другое поле ....... Источник, который находится в описании проблемы, - это именно то, что должен запрос Покажите мне. - person Vitor Darela; 21.07.2018
comment
Можете ли вы обновить свой вопрос с помощью сопоставления, полученного от curl -XGET http://localhost//elasticsearch/channels? - person Val; 21.07.2018
comment
Извините за задержку, ваш запрос сработал, проблема была в моих данных ... теперь все в порядке, спасибо за помощь. - person Vitor Darela; 25.07.2018
comment
Отлично, рад, что помог! - person Val; 25.07.2018
comment
Кстати, у меня тоже была проблема с этой структурой запроса, но когда я заменил OR NOT(_exists_:channel.schedule.creation_date) на OR (NOT _exists_:channel.schedule.creation_date), у меня все заработало. Небольшой нюанс, но потребовалось время. - person Vladimir Gilevich; 26.03.2019