Elasticsearch
-
[Elasticsearch] query, aggregation size 변경Elasticsearch 2020. 8. 11. 20:57
Query, Terms Aggregation 사용 시 모든 bucket이 나오지 않는 문제 원인 : 검색 결과의 default size가 전체 return 개수보다 작아서 발생(default = 10) 해결방법 : 명시적으로 return 크게 size 지정 // term TermsAggregationBuilder termsAggregation = AggregationBuilders .terms("count_by_rule_id") .field("rule_id") .size(errorRuleController.getErrorRules().size()+50); // error rule 사이즈보다 작으면 집계 과정에서 결과 누락됨 // Query BoolQueryBuilder boolQueryBuilder = ..
-
[Elasticsearch] indexAsync 사용 시 2번째 파라미터 찾을 수 없는 문제Elasticsearch 2020. 8. 11. 20:56
dexAsync(request, RequestOptions.DEFAULT, listener) 사용 시 두 번째 파라미터 RequestOptions.DEFAULT가 org.elasticsearch.client:elasticsearch-rest-client:6.4.3 버전이어야 하는데 7.6버전을 참조해 no method error 발생 원인 : compile("org.elasticsearch.client:elasticsearch-rest-high-level-client:6.4.3") 위의 라이브러리를 그레이들로 빌드할 때 자동으로 compile("org.elasticsearch.client:elasticsearch-rest-client:7.6") 이 들어와서 빌드됨 해겳방법 : Gradle에 다음을 순서대..
-
[Elasticsearch] Java Rest Client 사용 시 버전 충돌 문제Elasticsearch 2020. 8. 11. 20:55
원인 : gradle에 compile("org.elasticsearch.client:elasticsearch-rest-high-level-client:6.4.3") 만 넣고 빌드하면 자동으로 es 최신버전(7.X)이 같이 들어와서 빌드되면서 충돌 일으키면서 안 됨 해결방법: 먼저 es 6.4.3을 클래스패스에 추가 하고 rest client를 추가해야함 즉, 다음을 순서대로 수행해야 함 1. gradle에 다음 추가 : compile group: 'org.elasticsearch', name: 'elasticsearch', version: '6.4.3' 2. gradle refresh 3. gradle에 다음 추가 : compile("org.elasticsearch.client:elasticsearch-..
-
[Elasticsearch] Mapping시 유의사항(dynamic mapping, _all field, text, keyword)Elasticsearch 2020. 8. 11. 20:52
한 번 설정된 mapping의 type은 변경할 수 없음! (예를 들어, text→keyword 변경 불가) 다음의 내용을 충분히 고려해야함 문자열을 전문 검색에 이용할 것인가 날짜 필드를 가지는 필드는 무엇인가 매핑에 정의되지 않고 유입되는 필드는 어떻게 처리할 것인가 1. dynamic mapping 사용 자제 - ES는 기본적으로 schemaless이기 때문에, 매핑 정보가 없어도 알아서 적절한 매핑을 생성해줌 - 자동으로 생성된 매핑 이후, 다른 타입의 데이터가 들어온다면 색인되지 않음 - dynamic mapping 기능을 명시적으로 해제해 주어야 함 PUT /account_log { "settings": { "number_of_shards": 5, "number_of_replicas": 1 }..
-
[Elasticsearch] 색인 속도 향상 방법(asyncIndex, bulk index api, refresh interval)Elasticsearch 2020. 8. 11. 20:52
1. _all field disable - 필드 이름을 지정하지 않고 검색할 때 사용되는 필드 - 도큐먼트의 모든 필드의 value를 하나로 합쳐서 가지고 있는 필드이기 때문에 field 수가 많아지면 _all field 크기가 너무 커짐 - _all field는 text type으로 간주되어 색인 시 analyze 대상이 되므로 색인 속도가 느려짐 2. dynamic mapping disable - dynamic mapping 시 문자열 필드의 경우 keyword 타입, text 타입 2개의 타입을 가지는 멀티 타입 필드로 생성됨 - text type의 경우 색인 시 analyze 대상이 되므로 색인 속도가 느려짐 3. refresh interval 늘리기 - 색인 된 데이터는 Lucene 내부의 세그..