Удалить просроченные записи в синтаксисе запроса solr

У меня проблема с синтаксисом запроса solr (я думаю) с solr 1.4. Я пытаюсь исключить просроченные записи из запроса solr. Однако, если у записи нет записи об истечении срока действия, я также хотел бы вернуть эту запись. Например.

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

expirydate:[NOW/DAY TO *]

Затем я подумал получить список записей, у которых нет срока годности, который я могу использовать.

-expirydate:[* TO *]

Оба запроса работают сами по себе. Т.е. первый запрос возвращает 3 записи. Второй запрос возвращает 921 запись. Однако, когда я объединяю 2 запроса вместе с оператором ИЛИ, я получаю 0 записей:

expirydate:[NOW/DAY TO *] OR -expirydate:[* TO *]

Есть идеи, что я делаю не так?

Спасибо

Дэйв


person CraftyFella    schedule 04.03.2010    source источник
comment
дубликат: stackoverflow.com/questions / 634765 /   -  person Mauricio Scheffer    schedule 04.03.2010


Ответы (2)


Не уверен здесь на 100%, но я не думаю, что вы можете комбинировать ИЛИ с оператором отрицания таким образом.

Попробуйте добавить фиктивное поле с одинаковым значением в каждый документ и попробуйте

enddate:[NOW/DAY TO *] OR (dummy:yes -enddate:[* TO *])
person bajafresh4life    schedule 04.03.2010
comment
Wicked .. это полностью работает. Спасибо. У меня уже есть поле, которое я могу использовать, но оно не меняется. +1 - person CraftyFella; 04.03.2010
comment
Как вы думаете, это ошибка в Solr? Или я просто неправильно использую синтаксис? - person CraftyFella; 04.03.2010

Мне просто нужно было решить эту проблему, я приступил к реализации утвержденного ответа, но затем понял, что могу просто сделать это:

-expired-date: [* СЕЙЧАС]

Это работало независимо от того, была ли установлена ​​дата истечения срока действия документа.

person Squeee123    schedule 15.06.2012