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의 날짜 범위를 쿼리

두 개의 다른 입력란을 쿼리한다고해서 항상 올바른 결과가 나오는 것은 아닙니다. 이러한 날짜 범위 대 날짜 범위 쿼리를 쿼리 할 수있는 방법이 있습니까?

답변

1

,하지만 나는 그런 결과를 쉽게 얻을 수 있다고 생각하지 않습니다.

당신은 MS에서 섹션을 보면, 반환 된 필드로이 구축 FunctionQueries를 사용하려고 수도 있습니다,하지만 난 당신이 그것을 얻을 수있는 당신이 할 경우, 그것은 매우 복잡한 기능과 함께있을 것입니다 확실하지 않다 ..

물론 클라이언트 측에서 중복 범위를 직접 계산할 수 있습니다.

1

나는 SOLR 특히 모르겠지만, 대부분의 쿼리 언어로 난 당신이 다음과 같이 사용하십시오 사용했습니다 :

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

(@EligStartDate이 입력 시작 날짜와 @EligEndDate입니다 귀하의 입력 끝을 날짜)

이렇게하면 두 개의 적격성 날짜 범위 사이에 겹치는 부분이있는 모든 레코드를 찾을 수 있습니다. 당신이 데이터베이스에있는 것과 결과를 다듬을 경우에 지금, 당신은 MIN/MAX 기능 같은 것을 사용할 수 있습니다, 당신은 쉽게 SOLR은 관련 문서를 반환받을 조회 할 수 있습니다

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

체크 아웃 크리스 Hostetter의 슬라이드 데크, 또한 SOLR 위키의 문서가 Spatial Search Tricks for People Who Don't Have Spatial Data

가 : SpatialForTimeDurations

테이크 어웨이는 당신이 X의 시간을 나타낼 수 있다는 것입니다, Y는 시스템 및 SOLR 좌표 "상자"가 겹치는 경우 알려줍니다. 슈퍼 직관적 인 것은 아니지만 멋진 트릭입니다.

+0

그가 원하는 것은 특정 날짜 값을 가진 field1, field2,2006/01/01-2012/01/01 결과에서 얻는 것임을 이해했습니다. 당신은 공간 속임수가 그것을 어떻게 할 수 있는지 설명 할 수 있습니까? – Persimmonium

0

이것은 Solr DateRangeField이 지원하도록 설계된 것이지만 Solr 1.5 이상으로 업그레이드해야 할 수도 있습니다. 범위의 양쪽 끝은 필드의 단일 값으로 인덱싱됩니다. 여러 범위 (값)가 지원됩니다.

는 SOLR의 DateRangeField는 기간을 표현하는 더 (수학 기간 이하로) 상기 시간 기간 구문 동일한 포인트를 지원한다. 한 클래스의 예제는 잘린 날짜입니다. 은 표시된 전체 기간을 전체 날짜로 나타냅니다. 다른 클래스는 범위 구문 ([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 것으로 보인다.

관련 문제