2013-05-23 3 views
12

말하십시오. 한정된 값만 가질 수있는 필드가 있습니다. 일종의 ENUM으로 저장하는 것이 더 효율적이지는 않습니까 (인덱스 방식 및/또는 스토리지 방식)?탄성 검색 열거 필드

탄력적 인 검색에는 이러한 가능성이 있습니까?

예제는 상태 시스템의 상태 이름입니다.

+0

열거 형의 일부가 아닌 값을 입력하려고하여 형식 제약 조건이 손상된 경우 ENUM 형식에서 오류를 throw하지 않아도됩니까? – LeeGee

답변

13

예. 전체 텍스트 필드를 색인 할 때 Elasticsearch는 필드의 길이, 필드의 각 용어의 위치 및 빈도와 같은 정보도 색인화합니다.

이들은 ENUM 값과는 관련이 없으며 완전히 제외 할 수 있습니다. 다음 {"index": "not_analyzed"}로, 당신이 그것을 분석하려고하지 않고 제공하는 정확한 값을 저장하는 외에, 그것은 또한 내가 위에서 언급 한 추가 정보의 저장을 비활성화하면 지도 자신의 분야 경우 사실

.

+0

그래, 네가하는 말 알아. 그러나 데이터를 더 줄이려합니다. 필드가 세 가지 값 중 하나를 가지지 만 값이 매우 긴 문자열 인 경우, 이들을 "분석"하지 않아도 계속 저장하는 것은 낭비입니다. 또한 해당 필드의 가능한 값을 제한하고 싶습니다. – eran

+4

예, 아니오. 첫째, 색인에서 각 문자열은 한 번만 저장됩니다. 그것은 거꾸로 된 색인이 작동하는 방법입니다. "용어": [해당 용어가 포함 된 문서 목록]. 값은 _source 필드 내에서 반복적으로 나타나지만 자동으로 압축되므로 예상 한 것만 큼 큰 영향을 미치지는 않습니다. – DrTech

+2

명확히하기 : 여전히 LONGNAME -> ENUM 매핑을 원할 경우, 애플리케이션에서 그렇게해야 할 것입니다. – DrTech

2

앱에서 해시도 { "enumVal1" => 1, "enumVal2" => 2, "enumValX" => 3 }을 사용한 다음 ES에서 hashmap의 값만 사용하면 공간을 절약 할 수 있습니다.