2014-01-29 3 views
2

Дата Запрос на одно поле даты можно использовать с помощью solr. Но у меня есть подходящая дата начала (например, 2001/01/01) и дата окончания (скажем, 2012/01/01) по моим данным. Теперь я должен запросить диапазон дат от 2006/01/01 до 2013/01/01. Это должно дать мне данные с 2006/01/01 (дата начала поиска> дата приемлемости) до 2012/01/01 (дата окончания поиска не соответствует дате окончания срока действия).Запрос диапазона дат в solr в диапазоне дат

Запрос на 2 разных поля не всегда дает правильный результат. Есть ли способ запросить такой диапазон дат и запрос диапазона дат?

ответ

1

вы можете легко запросить Solr, чтобы получить соответствующие документы вернулись, но и, что Я не думаю, что вы можете легко получить такой результат.

Вы можете попробовать использовать FunctionQueries, чтобы построить это как возвращенное поле, посмотрите на мсе раздела, но я не уверен, что вы могли бы достичь, если вы делаете, это будет с очень запутанной функцией .. .

Конечно, вы всегда можете рассчитать диапазон перекрытия самостоятельно на стороне клиента.

1

Я не знаю Solr конкретно, но в большинстве языков запросов я использовал вы бы использовать что-то вроде следующего:

SELECT * 
FROM table 
WHERE @EligStartDate <= [EligEndDate] 
    AND @EligEndDate >= [EligStartDate] 

(@EligStartDate ваша дата ввода начала и @EligEndDate это ваш входной конец дата)

Это будет найти все записи, где есть некоторое совпадение между двумя диапазонами дат приемлемости. Теперь, если вы хотите обрезать результат к тому, что у вас есть в базе данных, вы можете использовать что-то вроде функции MIN/MAX:

/* Use the latest start date and the earliest end date */ 
SELECT MAX(@EligStartDate, [EligStartDate]) 
    , MIN(@EligEndDate, [EligEndDate]) 
... 
1

Заканчивать Криса Хостеттера в слайд палубе, Spatial Search Tricks for People Who Don't Have Spatial Data

Существует также документ в вики Solr: SpatialForTimeDurations

отводящий, что вы можете представить время в Х, Y системы и Solr координат скажет вам, перекрываются ли «ящики». Это не супер интуитивно, но это классный трюк.

+0

add понял, что он хочет получить это в результатах: field1, field2,2006/01/01-2012/01/01 с этими конкретными значениями даты. Можете ли вы объяснить, как это может сделать пространственный трюк? – Persimmonium

0

Это именно то, что Solr DateRangeField был разработан для поддержки, но вам, возможно, придется обновить, по крайней мере, до Solr 1.5, чтобы получить его. Оба конца диапазона индексируются в одно значение в поле. Поддерживаются несколько диапазонов (значений).

DateRangeField Solr поддерживает ту же точку на дату времени синтаксиса , описанный выше (с датой математикой, описанными ниже) и более, чтобы выразить диапазонов дат. Один класс примеров - это усеченные даты, которые представляют весь диапазон дат до указанной точности. В другом классе используется синтаксис диапазона ([TO]). Вот некоторые примеры:

2000-11 – The entire month of November, 2000. 
2000-11T13 – Likewise but for an hour of the day (1300 to before 1400, i.e. 1pm to 2pm). 
-0009  – The year 10 BC. A 0 in the year position is 0 AD, and is also considered 1 BC. 
[2000-11-01 TO 2014-12-01] – The specified date range at a day resolution. 
[2014 TO 2014-12-01]  – From the start of 2014 till the end of the first day of December. 
[* TO 2014-12-01]   – From the earliest representable time thru till the end of the day on 2014-12-01. 

В качестве дополнительного бонуса, новый тип поля, как представляется, faster for common date queries, чем его предшественники, тоже.

Смежные вопросы