2012-07-23 2 views
3

ElasticSearch와 관련된 두 가지 질문이 있습니다.ElasticSearch의 최신 레코드 정렬 및 정렬

1) 특정 필드가 내림차순으로 정렬 된 결과를 원한다고 지정할 수있는 방법이 있습니까? equivalt의 SQL 쿼리는 다음과 같습니다

select * from table1 where a="b" order by myprimarykey desc; 

2) 어떻게 처음이야와 마지막 (최신) 레코드?

답변

8

1) Elasticsearch는 정렬 순서를 제어 할 수있는 매우 정교한 Sorting API입니다. 그래서, elasticsearch에, 당신의 MySQL의 쿼리에 해당하는이과 같습니다

{ 
    "query" : { 
     "term" : { "a" : "b" } 
    }, 
    "sort" : [ 
     { "myprimarykey" : "desc"} } 
    ] 
} 

을 또한 _search URI에 지정 될 수 정렬.

2) 첫 번째 레코드와 마지막 레코드를 검색하려면 descasc 정렬 순서로 두 번 검색하고 각각에 대해 하나의 레코드를 검색해야합니다. Multi Search API을 사용하여 두 쿼리를 결합 할 수 있습니다.

+0

두 번째 사항에 대해서는 "모두 일치"쿼리와 함께 "desc"를 사용해 보았습니다. 그러나 문제는 결과의 "히트"가 1이 아닌 큰 레코드 수를 보여줍니다. 즉, 1 레코드를 원한다고해도 모든 레코드가 스캔되고 하나가 반환됩니다. 첫 번째 및/또는 마지막 레코드가 하나만 필요합니다 (둘 다 별도의 쿼리 사용). –

+0

큰 레코드 수는 "모두 일치"쿼리에서 찾은 레코드 수입니다. 예, 모든 레코드를 찾고 단 하나만 검색하지만, SQL 용어로 전체 테이블을 스캔한다는 것을 의미하지는 않습니다. 꽤 가볍습니다. – imotov

+0

확인. 마지막으로 한 가지 .. 색인에 몇 백만 개의 레코드가있는 경우 위 쿼리에 대한 성능이 영향을 받습니까? –

관련 문제