2015-03-03 5 views
1

Есть ли структурированный запрос CloudSearch для возврата результатов, которые не имеют значения в поле? Например, у меня есть поле target_date, которое не всегда имеет значение, и я хочу вернуть все результаты без target_date. Это поле не равно нулю или не установлено по умолчанию; он вообще не существует для предметов без даты.CloudSearch - возвращает результаты, когда поле не существует

Существует еще один случай. Мне нужно вернуть все результаты после target_date И включать любые результаты без существующей даты. Структурированный запрос, который я использую, - target_date:['2000-03-03T00:00:00Z',}. Запрос найти несуществующие даты должны работать с and оператором, как: (and target_date:['2000-03-03T00:00:00Z',} [QUERY_GOES_HERE])

ответ

4

Я считаю, что вы спрашиваете, то же самое, как Amazon Cloudsearch : Filter if exists

Суммируя варианты оттуда:

  1. Добавить новое булево поле под названием «has_target_date»
  2. Установите target_date по умолчанию (например, 1/1/1970) означает, что он не существует
  3. рубить: (диапазон поля = target_date [0,})

Любой из этих вариантов должен работать с частью QUERY_GOES_HERE вашего вопроса.

+0

запроса '(диапазон поля = target_date [0,})' не делает работа над полем даты и '(range field = target_date ['0000-00-00T00: 00: 00Z',})' дал мне результаты с существующими датами. Если нет ничего, кроме «взлома», который может это сделать, тогда я думаю, что значение по умолчанию было бы лучшим решением. Есть ли у вас какие-либо другие предложения? – Siphon

+2

Если '(range field = target_date ['0000-00-00T00: 00: 00Z',})' дал вам результаты _with_ дат, вы можете попробовать отрицать его с помощью '(NOT (range field = target_date ['0000-00- 00T00: 00: 00Z ',})) '(см. Оператор NOT: http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-compound-queries.html) – alexroussos

+0

Это отлично работает! Иногда простые детали - это те, которые мы пропускаем. – Siphon

1

Вы также можете построить запрос lonnnng, чтобы исключить любые элементы, которые имеют строку в этом поле. По сути, вы говорите: «Дайте мне все, что не начинается с A-Z или 0-9»

В предварительных тестах моими результатами были все предметы, которые полностью отсутствовали. Пример кода ниже для соединения (структурированного) запроса на поле «название», чтобы найти все элементы, которые не имели титул на всех

(and (not (prefix field='title' 'a')) (not (prefix field='title' 'b')) (not (prefix field='title' 'c')) (not (prefix field='title' 'd')) (not (prefix field='title' 'e')) (not (prefix field='title' 'f')) (not (prefix field='title' 'g')) (not (prefix field='title' 'h')) (not (prefix field='title' 'i')) (not (prefix field='title' 'j')) (not (prefix field='title' 'k')) (not (prefix field='title' 'l')) (not (prefix field='title' 'm')) (not (prefix field='title' 'n')) (not (prefix field='title' 'o')) (not (prefix field='title' 'p')) (not (prefix field='title' 'q')) (not (prefix field='title' 'r')) (not (prefix field='title' 's')) (not (prefix field='title' 't')) (not (prefix field='title' 'u')) (not (prefix field='title' 'v')) (not (prefix field='title' 'w')) (not (prefix field='title' 'x')) (not (prefix field='title' 'y')) (not (prefix field='title' 'z')) (not (prefix field='title' '1')) (not (prefix field='title' '2')) (not (prefix field='title' '3')) (not (prefix field='title' '4')) (not (prefix field='title' '5')) (not (prefix field='title' '6')) (not (prefix field='title' '7')) (not (prefix field='title' '8')) (not (prefix field='title' '9')) (not (prefix field='title' '0'))) 
Смежные вопросы