2012-03-08 3 views
3

내 ElasticSearch 색인에 9000 개의 문서가 있습니다.탄성 검색 문서 정렬, 색인 생성 문제

분석 된 문자열 필드로 정렬하고 싶기 때문에 (Google을 통해) 필자는이 필드로 정렬 할 수 있도록 매핑을 업데이트해야합니다. 매핑의 변경 사항을 반영하기 위해 데이터의 색인을 다시 지정하십시오.

재 인덱싱 프로세스가 내 컴퓨터에서 약 20 분 정도 소요되었습니다.

매우 이상한 점은 다시 색인 생성 프로세스가 매우 강력한 프로덕션 서버에서 약 2 시간을 소비한다는 것입니다.

메모리 상태와 해당 서버의 프로세서 사용량을 확인했는데 모든 것이 정상입니다.

내가 알고 싶은 것입니다 : 전체 문서를 다시 인덱싱하지 않고 분석, 토큰 화 된 필드로 문서를 정렬 할 수있는 방법이

  1. 있습니까?

  2. 전체 문서의 색인을 다시 생성해야하는 경우 서버에서 문서의 색인을 다시 생성하는 데 왜 이렇게 많은 시간이 걸릴까요 ?? 또는 해당 서버에서 느린 이유를 추적하는 방법?

+2

1. 매핑을 변경하면 다시 인덱스가 필요합니다. 그러나 분석 필드 (표시/검색 목적 또는 기타)와 분석되지 않은 필드 (동일한 데이터 포함)를 나란히 놓고 정렬하는 것은 매우 유효합니다. 아마도 이것은 내가 당신의 질문에서 추론 한 것으로 보이는 암시 적 유스 케이스에 대한 대답 일 것입니다. –

+2

동일한 데이터 맵을 여러 필드에 사용하면 (위의 제안과 같이) http://www.elasticsearch.org/guide/reference/mapping/multi-field-type.html에서 쉽게 수행 할 수 있습니다. 고객 코드로 변경하십시오. –

답변

0

필드가 _source에 저장되어 있다면 검색 할 때마다 스크립트를 사용하여 사용자 정의 필드를 만들 수 있다고 확신합니다.

{ 
    "query" : { "query_string" : {"query" : "*:*"} }, 
    "sort" : { 
    "_script" : { 
     "script" : "<some sorting field>", 
     "type" : "number", 
     "params" : {}, 
     "order" : "asc" 
    } 
    } 
} 

이것은 검색 할 때마다 서버 측의 정렬 스크립트를 재평가하는 단점이 있지만, 나는 그것을 해결합니다 (1).