2012-04-19 3 views
3

에 필드를 다중 :
<doc>
<arr name="StartDate">
<date>2012-08-18T17:00:00Z</date>
<date>2012-06-28T17:00:00Z</date>
<date>2013-02-28T17:00:00Z</date>
<date>2012-04-16T17:00:00Z</date>
<date>2012-08-06T17:00:00Z</date>
<date>2012-05-18T17:00:00Z</date>
<date>2012-07-04T17:00:00Z</date>
</arr>
<arr name="EndDate">
<date>2012-09-29T17:00:00Z</date>
<date>2012-06-29T17:00:00Z</date>
<date>2013-04-16T17:00:00Z</date>
<date>2012-05-07T17:00:00Z</date>
<date>2012-08-15T17:00:00Z</date>
<date>2012-06-22T17:00:00Z</date>
<date>2012-08-01T17:00:00Z</date>
</arr>
</doc>
쿼리 나 문서 같은이 SOLR

내가 날짜 범위를 가지고 범위를 커버 A STARTDATE 한 쌍의 종료 날짜를 찾고 싶어요. 예를 들어 입력 범위 (x, y)가 2012-08-18 < x 및 2012-09-29 > 인 경우 startDate 및 EndDate의 첫 번째 쌍 (2012-08-18 TO 2012-09-29)은 true를 반환합니다. AND 종료 날짜 : 2012-09-29T00 : 00 [: 00 : 00.000Z 2012-08-18T00 TO 59.999Z : 1995-12-31T23 : 59]
STARTDATE :

은이 같은 쿼리를 작성 : 00.000Z TO 2099-01-01T00 : 00 : 00.000Z]
하지만 문제는 위의 14 개 항목에서 SOLR 검색 모든 일치 날짜입니다. 한 항목 씩 비교하고 싶습니다 (1, 1, 2 2 ...).

어떻게하는지 알려주세요. 많은 감사합니다.

답변

2

나는 비슷한 모델을 가지고 있지만, 내 지식으로는 Solr에서 이것을 수행 할 수있는 방법이 없습니다.

SOLR는 의미 "평면"인덱스를 가지고 당신의 기본 개체는 다음과 같습니다 경우 :

dates: [ 
    (start1, end1), 
    (start2, end2), 
    (start3, end3) 
] 
가 평면화됩니다

:

start_date: [ start1, start2, start3 ] 
end_date: [ end1, end2, end3 ] 

그리고 사이에 연결이 없기 때문에 각 startend 쌍이므로 범위 쿼리를 수행 할 방법이 없습니다. Solr에서 직접 작동하려면이 연결을 유지 관리하는 사용자 정의 Solr 필드 유형을 구현해야합니다.

또 다른 해결 방법은 기본 필드의 날짜 필드와 id으로 별도의 Solr core을 사용하는 것입니다. 단점은 기본 엔터티의 다른 필드에서 날짜 검색과 필터링을 결합 할 수 없다는 것입니다.

+0

첫 번째 해결책입니다. 나는 Solr 'function'쿼리를 사용하려고 생각하고 있습니다. 2 개의 배열을 반복 할 수있는 한 우리는 그것을 할 수있는 방법을 찾을 수 있습니다. 그냥 내 생각. 나는 Solr에게 아주 새로운 사람이다. 감사합니다. 다른 답변을 기다리고 있습니다. – dtnam

+0

다중 값 필드에 대해 순서가 보장되지 않습니다. 이것을 확인하기 위해 소스를 읽지는 않았지만, 대신 [start2, start1, start3]'으로 끝날 수 있습니다. – beerbajay

+0

내가 볼 수있는 다른 방법은 검색 할 수있는 하나의 값으로 (start1, end1)을 비정규 화하는 것입니다. 그러나 이것은 쉬울 수도/불가능할 수도 있습니다. – Fuxi