'Setup'에 해당되는 글 12건
12. URL-based Access Control :: 2015/05/13 16:45
많은 사람들이 URL기반으로 Elasticsearch의 index에 접근하기 위한 Access Control을 위해서 Proxy를 사용한다. Multi-search, multi-get, bulk request를 위해서 사용자는 특정 index 정보는 URL에, 각 개별 request 정보는 request body에 담는 것을 선택한다. 이것은 URL 기반 Access Control을 어렵게 한다.
URL에 있는 특정 index를 overrding하는 것을 방지하기 위하여 config.yml 파일에 다음 설정을 추가하라.
rest.action.multi.allow_explicit_index: false
기본값은 true지만, false로 설정했을 때는 Elasticsearch가 request body에 명시된 특정 index가 있다면 request를 reject한다.
11. Common Options - 02 :: 2015/05/13 16:45
Distance Units
거리가 필요할 경우, 예를 들어 Geo Distance Filter의 distance parameter와 같은 경우에 아무것도 단위가 명시되어 있지 않을 경우에는 기본적으로 미터단위이다. "1km"나 "2mi" (miles)와 같이 다른 단위로도 distance를 명시할 수 있다. 전체 리스트는 다음과 같다.
mi or miles : Mile
yd or yards : Yard
ft or feet : Feet
in or inch : Inch
km or kilometers : Kilometer
m or meters : Meter
cm or centimeters : Centimeter
mm or millimeters : Millimeter
NM, nmi or nauticalmiles : Nautical Mile
Geohash Cell Filter의 precision (정밀도) parameter는 위에 명시된 unit으로 거리를 표시한다. 하지만, unit이 명시되지 않았을 경우에는 geohash의 길이로 precision을 해석한다.
Fuzziness
어떤 query나 API는 fuzziness parameter를 사용하여 부정확한 fuzzy matching을 지원한다. Fuzziness parameter는 query에 사용된 field의 type에 따른 context에 따른다.
Numeric, date and IPv4 fields
숫자나 날짜, IPv4 field가 query에 있을 때, fuzziness는 +/- margin으로 해석한다. 마치 다음과 같은 Range Query처럼 동작한다.
-fuzziness <= field value <= +fuzziness
Fuzziness parameter는 2나 2.0처럼 숫자로 표시되어야 한다. Date field는 밀리초단위의 long값으로 해석된다. 하지만, 시간 단위를 가진 string값 - "1h"와 같은 - 은 단위에서 의미하는 값으로 받아들인다. Ip field는 long이나 또 다른 IPv4 주소 (long으로 변환될 수 있는) 를 수용한다.
String fields
Query에 string이 사용되었을 경우, fuzziness는 Levenshtein Edit Distance (http://en.wikipedia.org/wiki/Levenshtein_distance) - 하나의 문자가 숫자로 변경되는 - 로 처리된다.
Fuzziness parameter는 다음과 같이 정리할 수 있다.
0, 1, 2 : Levenshtein Edit Distance에 허용되는 최대값
AUTO : 길이에 따라 edit distance를 계산함.
0..1 : 정확히 일치하는 경우
1..5 : one edit만 허용
>5 : two edit 허용
AUTO는 fuzziness에 대한 최적값을 계산한다.
0.1..1.0 : 공식을 통해서 edit distance를 계산한다. Length(term) * (1.0 - fuzziness). 예를 들어 길이 10을 가진 fuzziness가 0.6이면 edit distance는 10 * (1.0 - 0.6) = 4.0이다.
[NOTE]
모든 API에 대한 Fuzzy Like This Query (http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-flt-query.html) 측면에서 edit distance의 최대값은 2이다.
Result Casing
모든 REST API는 case parameter를 가질 수 있다. camelCase가 설정될 때는 결과에 속한 모든 field name에 camel casing이 있는 결과를 리턴할 것이다. 아니면 underscore가 사용된 결과가 리턴될 것이다. Index된 source document에는 적용되지 않는다.
JSONP
사용가능할 때, 모든 REST API는 JSONP 결과 내, callback parameter 결과를 받을 수 있다. Config.yaml 파일에 다음 항목을 추가함으로 수행 가능하다.
http.jsonp.enable:true
사용가능하도록 설정되었을 때, elasticsearch의 아키텍처 때문에 security risk를 야기한다는 것에 주의하라. 특정 환경하에서는 attacker가 여러분의 브라우저를 이용해 JSONP request를 만들어서 Elasticsearch Server의 데이터를 탈취할 수 있다.
Request body in query string
POST가 아닌 request에 대해서 body를 수용하지 않는 library에 대해서 string parameter의 source query를 이용해 body를 전송할 수 있다.
11. Common Options - 01 :: 2015/05/13 16:44
다음 options들은 모든 REST API에 적용할 수 있다.
Pretty Results
Request의 말미에 ?pretty=true를 추가했을 때는 JSON이 예쁜 형태로 리턴된다. (단지 디버깅 목적으로만 사용하라!) 또다른 옵션으로 ?format=yaml로 설정하면 더 읽기 쉬운 yaml 형태로 결과가 리턴될 것이다.
Human Readable Output
통계는 사람에게 적합한 형태 (예를 들어 "exist_time":"1h" or "size":"1kb")와 컴퓨터에게 적합한 형태 (예를 들어 "exists_time_in_millis": 3600000 or "size_in_bytes": 1024)로 리턴된다. 사람이 읽기에 적합한 형태의 값들은 query string에 ?human=false를 추가하여 기능을 끌 수 있다. 이것은 통계 결과가 사람보다는 모니터링 툴에 의해 다루어질 때 의미가 있다. 기본적으로 human flag는 false이다.
Flat Settings
Flat_settings flag는 설정값들을 제시하는 효과가 있다. Flag_settigns값이 true일 때, 설정값들이 flat format 형태로 리턴된다.
{
"persistent" : { },
"transient" : {
"discovery.zen.minimum_master_nodes" : "1"
}
}
Flat_settings가 false일 때, 설정값들은 좀 더 사람이 읽을 수 있는 구조화된 형태로 리턴된다.
{
"persistent" : { },
"transient" : {
"discovery" : {
"zen" : {
"minimum_master_nodes" : "1"
}
}
}
}
기본적으로 flat_settings 값은 false이다.
Parameters
REST parameter들(HTTP를 사용할 때, HTTP URL에 사용되는 parameter들)은 underscore를 사용한다. (underline 사용)
Boolean Values
모든 REST API parameter들은 (request parameter와 JSON body) boolean "false"에 해당하는 값으로 false, 0, no, off를 사용할 수 있다. 그 이외 다른 값들은 모두 "true"로 간주한다. Index된 document내에서 boolean field를 다루는 것과는 아무 상관이 없다는 것에 유의하라. (단지 request parameter와 json body에서만 이렇게 다룬다는 뜻임.)
Number Values
모든 REST API는 JSON number type 뿐만 아니라 string으로 number 값을 표시하는 것을 지원한다.
Time Units
Duration이 필요할 경우, 예를 들어 timeout parameter이 경우에 duration은 밀리초를 나타내는 숫자로 표시할 수 있다. 혹은 2일의 경우 2d와 같이 표시할 수도 있다. 지원되는 단위는 다음과 같다.
y : Year
M : Month
w : Week
d : Day
h : Hour
m : Minute
s : Second
10. Multiple Indices :: 2015/05/13 16:43
Index parameter를 가리키는 대부분의 API는 간단히 test1, test2, test3 notation을 사용하여 (혹은 모든 index에 대해서는 _all) 여러 index에 걸쳐 실행될 수 있다. 물론 wildcard도 지원한다. 예를 들어 test*와 같이 사용할 수도 있다. 또한 +기호를 추가의 의미로, -기호를 삭제의 의미로 사용할 수도 있다. 예를 들어 +test*, -test3과 같이 사용할 수 있다.
모든 multiple indices API는 다음과 같은 url에 사용되는 string parameter를 지원한다.
- Ignore_unavailable : 특정 index가 사용불가능하다면 무시하도록 한다. 존재하지 않거나 closed index에 대해서도 적용할 수 있다. 값은 true | false를 갖는다.
- Allow_no_indices : wildcard index 표현에 맞는 index 결과가 없다면 실패라고 설정한다. True나 false값을 가질 수 있다. 예를 들어, wildcard 표현으로 foo*에 해당하는 index가 없다면 이 요청에 대해서는 fail일 것이다. 이 설정은 또한 _all, *, index가 전혀 없을 때도 적용할 수 있다. 또한 Closed index에 대한 Alias에도 적용할 수 있다.
- Expand_wildcards : 어떤 종류의 구체적인 index에 대해서도 wildcard index 표현을 확장할 수 있다. 예를 들어 open이라고 사용하면, wildcard 표현은 단지 open index에 대해서만 확장된다. 반대로 closed가 사용되면 wildcard 표현은 단지 closed index에만 확장된다. 또한 모든 index에 대해서 두가지 (open, closed) 모두 사용할 수도 있다.
만약 none을 사용하면 wildcard 표현은 사용할 수 없다. All의 경우에는 모든 index에 대해서 wildcard 표현을 사용할 수 있다.
위 parameter의 기본 설정은 사용되는 api에 달려 있다.
[NOTE]
Document API (http://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html) 와 single-index alias API (http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html) 와 같은 Single Index API는 multiple index를 지원하지 않는다.
09. API Conventions :: 2015/05/12 19:28
Elasticsearch REST API는 HTTP 프토토콜과 JSON Data format을 이용한다.
이 chapter에서 언급된 convention은 별도로 기술되어 있지 않는 한, REST API를 통해 적용할 수 있다.
- Multiple Indices
- Common Options