2013-09-23 4 views
11

날짜 필드에서 정렬 할 문서가 있습니다. 지정된 날짜, 오늘의 예제 및 그 이후의 모든 날짜와 날짜가 같은 문서의 경우 오름차순으로 정렬하고 싶습니다. 지정된 날짜 이전 날짜의 경우 내림차순으로 정렬하고 싶습니다.ElasticSearch의 조건부 정렬

ElasticSearch에서 가능합니까? 그렇다면 어떤 문헌이나 접근법을 제안 할 수 있습니까?

날짜의 형식은 "date"이고 형식은 "dateOptionalTime"입니다.

감사

특정 사용의 경우 이런 종류의

답변

14

예 이것은 정렬 또는 채점을 위해 스크립트를 사용하여 ElasticSearch에서 가능합니다.

내가 선호하는 것은 '스크립트 기반 점수'가 더 빠를 것이기 때문에 점수 매기기 스크립트에 대한 것입니다.

스코어링 스크립트를 사용하면 int/long 날짜 필드에 유닉스 타임 스탬프를 사용하고 custom_score 쿼리에 mvel 정렬 스크립트를 사용할 수 있습니다. 문서의 색인을 다시 생성해야 할 수도 있습니다. 또한 ElasticSearch에서 검색 한 시간을 유닉스 타임 스탬프로 변환 할 수 있어야합니다.

정렬 스크립트는 요청 된 타임 스탬프를 각 문서의 타임 스탬프에서 차감하고 절대 값을 만듭니다. 그런 다음 결과가 오름차순으로 정렬됩니다. 가장 낮은 '거리'가 가장 좋습니다. 년 전에 일자 문서를 찾을 때

그래서, 같은 것을 보일 것이다 :

"query": { 
    "custom_score" : { 
     "query" : { 
      .... 
     }, 
     "params" : { 
      "req_date_stamp" : 1348438345, 
     }, 
     "script" : "abs(doc['timestamp'].value - req_date_timestamp)" 
    } 
}, 
"sort": { 
    "_score": { 
     'order': 'asc' 
    } 
} 

-

당신은 수도 (내 JSON의 실수에 대한 사과를 나는 pyes에서이 아이디어를 테스트) 반올림을 수행하기 위해이를 조정할 필요가 있습니다. 예를 들어 일치하는 요일에 대해 언급하는 경우와 같이 타임 스탬프 생성기를 가장 가까운 날짜로 반올림 할 수 있습니다.

"전체"정보는 Custom Score Query docs을 확인하고 MVEL 스크립팅 링크를 참조하십시오.

+2

당신은 록맨입니다 !!! – sunshinekitty

3

, 당신은 정렬 스크립트를 사용해야합니다.

Sort documentation 페이지의 "스크립트 기반 정렬"섹션을 참조하십시오.