mapping
매핑 설정
> curl -XPUT localhost:9200/index명칭/_mapping/tyep명칭 -H "Content-Type: application/json" -d"{
\"properties\" : {
\"Field명칭\" : {
\"type\" : \"타입\"
}
}
}"
매핑 확인
> curl -XGET localhost:9200/index명칭/_mapping
RDBMS의 스키마와 비슷한 개념
키바나와 효과적으로 연동하기 위해 효율적인 매핑이 요구됨
* 한개의 index에 여러개의 type을 만들지 않는 것을 권장함
* 이미 생성된 매핑을 수정할 수 없다. - 데이터의 유무에 상관없이 매핑수정은 불가능
* 매핑시에 type을 text로 지정하고도 집계를 사용하고 싶은경우에 fields를 추가하여 추가적으로 타입을 지정한다.
ex) employer:
type: "text"
,fields:
keyword:
type:"keyword"
외부접속
* Elasticsearch는 기본적으로 로컬에서만 접속하도록 설정 되어있다
> elasticsearch\config\elasticsearch.yml 파일에 들어가서
55번째 줄 #network.host: 192.168.0.1 을 network.host: 0.0.0.0 으로 바꿔준다.
Aggregation
: document안의 값들을 조합해서 나타내고자 할때 쓰이는 기법
1. Metric Aggregation
: document 값을을 산술값들을 구할때 사용한다.
ex) 최대값, 최소값, 평균값등
> curl localhost:9200/index명/_search "{\"aggs\":{\"임의의 명칭\":{\"stats\":{\"field\":\"field명칭\"}}}}"
- 지정한 필드명칭을 기준으로 count, min, max, avg 등을 보여준다.
2. Bucket Aggregation
: 검색하고자하는 데이터를 그룹화 해서 보여주고자 할때 사용
ex) group by
> curl localhost:9200/index명/_search -d "{\"aggs\":{\"임의의 명칭\":{\"terms\":{\"field\":\"field명칭\"}}}}"
- 지정한 필드명칭으로 그룹화 된 데이터를 보여준다.
** mapping type이 text의 경우 "fielddata":true 를 mpaaing에 추가해 줘야 한다.
** mapping type이 integer인경우는 확인했으나 keyword에는 오류발생, fieliddata추가도 안됨
URL 검색
1. AND 검색
: localhost/index명칭/_search?q=field명칭:[조건A + TO + 조건B] AND fiedl명칭:내용
2. OR 검색
: localhost/index명칭/_search?q=field명칭:[조건A + TO + 조건B] + fiedl명칭:내용
3. 범위 검색
: localhost/index명칭/_search?q=field명칭:[조건A + TO + 조건B]
4. like검색
- wildcard를 사용해서 like검색을할 수 있으나 검색어의 맨 앞에 사용할 경우 성능이 저하된다.
: localhost/index명칭/_search?q=field명칭:*내용*
5. NOT equal
: localhost/index명칭/_search?q=NOT (field명칭:내용)
6. 정렬
: localhost/index명칭/_search?q=field명칭:[조건A + TO + 조건B]&sort=field명칭:asc/desc
7. 원하는 컬럼만 리턴
: localhost/index명칭/_search?q=field명칭:[조건A + TO + 조건B]&_source/fields=field1,field2,field3...
8. 부등식 검색
: localhost/index명칭/_search?q=field명칭:</>/<=/>=조건
request 검색 (filter)
* filter 방식이 match 방식보다 속도면에서 우수하다.
{ "bool" : { "must" : [], -----------> "AND" "should" : [], -----------> "OR" "must_not" : [], -----------> "NOT"형태로 사용
"filter": [] } }
1. equals search
ex) KIBANA 사용시
GET bank/_search
{
"query" : {
"constant_score" : {
"filter" : {
"bool" : {
"must" : [
{ "term" : {"age" : 39}},
{ "term" : {"city.keyword":"Nicholson"}}
]
}
}
}
}
}
{
"query" : {
"constant_score" : {
"filter" : {
"bool" : {
"must" : [
{ "term" : {"age" : 39}},
{ "term" : {"city.keyword":"Nicholson"}}
]
}
}
}
}
}
2. like search
ex) KIBANA 사용시
GET bank/_search
{
"query" : {
"constant_score" : {
"filter" : {
"bool" : {
"filter" : [
{ "wildcard" : {"state.keyword":{"value" : "*D*"}}}
]
}
}
}
}
}
{
"query" : {
"constant_score" : {
"filter" : {
"bool" : {
"filter" : [
{ "wildcard" : {"state.keyword":{"value" : "*D*"}}}
]
}
}
}
}
}
3. range search
ex) KIBANA 사용시
{
"query" : {
"constant_score" : {
"filter" : {
"bool" : {
"should" : [{
"range" : {
"age" : {
"gte" : 10,
"lte" : 20
}
}
}]
}
}
}
}
}
"query" : {
"constant_score" : {
"filter" : {
"bool" : {
"should" : [{
"range" : {
"age" : {
"gte" : 10,
"lte" : 20
}
}
}]
}
}
}
}
}
4. 원하는 field만 가져오기
"_source":["age", "state"],
ex) KIBANA 사용시
GET bank/_search
{
{
"_source":["age", "state"],
"query" : {
"constant_score" : {
"filter" : {
"bool" : {
"filter" : [
{ "wildcard" : {"state.keyword":{"value" : "*D*"}}}
]
}
}
}
}
}
"query" : {
"constant_score" : {
"filter" : {
"bool" : {
"filter" : [
{ "wildcard" : {"state.keyword":{"value" : "*D*"}}}
]
}
}
}
}
}
참고 사이트
'Elastic Search' 카테고리의 다른 글
Elastic Search 개요 및 간단한 CRUD (0) | 2019.09.05 |
---|