"ElasticSearch"의 두 판 사이의 차이
잔글 |
잔글 |
||
(같은 사용자의 중간 판 85개는 보이지 않습니다) | |||
69번째 줄: | 69번째 줄: | ||
| | | | ||
*DBMS에서 <span style="color:#0000FF;">'''테이블 스키마'''</span>와 유사한 개념 | *DBMS에서 <span style="color:#0000FF;">'''테이블 스키마'''</span>와 유사한 개념 | ||
+ | |||
+ | |- | ||
+ | | align="center" valign="middle" | Route | ||
+ | | | ||
+ | *색인 필드 중 unique key에 해당하는 값을 routing path로 지정한 후, 이 path를 사용하여 인덱싱과 검색에 사용할 shard를 지정하여 성능할 향상할 수 있습니다. | ||
+ | *Routing Field : 스토어 옵션을 yes로 index not_analyzed로 설정 | ||
|- | |- | ||
129번째 줄: | 135번째 줄: | ||
:::*type : string | :::*type : string | ||
+ | <br/><span style="color:#008000;">'''<span style="font-size:larger;">ElasticSearch 관련 오픈소스</span>'''</span> | ||
− | + | [[File:ElasticSearch Environment.png|700px|ElasticSearch Environment.png]] | |
− | + | == ElasticSearch 설치 == | |
− | == CentOS에서 ElasticSearch 설치 == | + | === CentOS에서 ElasticSearch 설치 === |
− | === ElasticSearch 설치 === | + | ==== ElasticSearch 설치 ==== |
*ElasticSearch 설치 | *ElasticSearch 설치 | ||
188번째 줄: | 195번째 줄: | ||
[http://node201.hadoop.com:9200/_plugin/head/ http://node201.hadoop.com:9200/_plugin/head/] #--- elasticsearch-head plugin이 설치된 경우 | [http://node201.hadoop.com:9200/_plugin/head/ http://node201.hadoop.com:9200/_plugin/head/] #--- elasticsearch-head plugin이 설치된 경우 | ||
− | === ElasticSearch 로드밸런서 설치 === | + | ==== ElasticSearch 로드밸런서 설치 ==== |
*ElasticSearch 로드밸런서 환경 설정 | *ElasticSearch 로드밸런서 환경 설정 | ||
203번째 줄: | 210번째 줄: | ||
plugin -install lukas-vlcek/bigdesk | plugin -install lukas-vlcek/bigdesk | ||
− | + | | |
− | + | ==== 환경 설정 ==== | |
− | |||
− | |||
− | |||
− | |||
− | === 환경 설정 === | ||
*환경 변수 | *환경 변수 | ||
224번째 줄: | 226번째 줄: | ||
vi /nas/appl/elasticsearch/config/elasticsearch.yml | vi /nas/appl/elasticsearch/config/elasticsearch.yml | ||
− | + | index: | |
− | + | store: | |
− | + | type: memory | |
:*명령행 옵션으로 설정 | :*명령행 옵션으로 설정 | ||
235번째 줄: | 237번째 줄: | ||
curl -XPUT 'node201.hadoop.com:9200/customer/ -d ' | curl -XPUT 'node201.hadoop.com:9200/customer/ -d ' | ||
− | + | index: | |
− | + | store: | |
− | + | type: memory | |
' | ' | ||
255번째 줄: | 257번째 줄: | ||
vi /etc/fstab | vi /etc/fstab | ||
− | + | #--- swap을 주석 처리 | |
:*ElasticSearch 설정으로 처리 | :*ElasticSearch 설정으로 처리 | ||
262번째 줄: | 264번째 줄: | ||
mkdir /tmp/tmpJna | mkdir /tmp/tmpJna | ||
vi config/elasticsearch.yml | vi config/elasticsearch.yml | ||
− | + | bootstrap.mlockall: true | |
elasticsearch -Djna.tmpdir=/tmp/tmpJna | elasticsearch -Djna.tmpdir=/tmp/tmpJna | ||
− | === Service로 실행 === | + | ==== Service로 실행 ==== |
*환경 설정 변수 | *환경 설정 변수 | ||
281번째 줄: | 283번째 줄: | ||
/sbin/chkconfig --add elasticsearch | /sbin/chkconfig --add elasticsearch | ||
− | == Windows에서 ElasticSearch 설치 == | + | === Windows에서 ElasticSearch 설치 === |
<span style="color:#008000;"><span style="font-size:larger;">'''ElasticSearch 설치'''</span></span> | <span style="color:#008000;"><span style="font-size:larger;">'''ElasticSearch 설치'''</span></span> | ||
299번째 줄: | 301번째 줄: | ||
− | + | Cluster 정보 확인 | |
− | == | + | *[http://localhost:9200/_cluster/health?pretty=true http://localhost:9200/_cluster/health?pretty=true] |
− | == | + | Node 정보 확인 |
+ | |||
+ | *[http://localhost:9200/_nodes?pretty=true http://localhost:9200/_nodes?pretty=true] | ||
+ | *[http://localhost:9200/_nodes/settings?pretty=true http://localhost:9200/_nodes/settings?pretty=true] | ||
+ | |||
+ | == ElasticSearch 설정 == | ||
+ | |||
+ | === ElasticSearch 폴더 구조 === | ||
{| border="1" cellspacing="0" cellpadding="2" style="width: 100%;" | {| border="1" cellspacing="0" cellpadding="2" style="width: 100%;" | ||
314번째 줄: | 323번째 줄: | ||
| style="text-align: center;" | <br/> | | style="text-align: center;" | <br/> | ||
| | | | ||
− | + | 윈도우용 실행 파일 | |
− | + | ||
− | + | *elasticsearch.bat : ElasticSearch 실행 프로그램 | |
− | + | *service.bat : Service 형태로 ElasticSearch 실행<br/>service.bat install | remove | start | stop | manager [SERVICE_ID] | |
− | + | *plugin.bat : 플러그인 설치 프로그램 (org.elasticsearch.plugins.PluginManager 프로그램이 실행됨) | |
− | + | ||
− | + | Linux용 실행 파일 | |
+ | |||
+ | *elasticsearch : ElasticSearch 실행 프로그램 | ||
+ | *plugin : 플러그인 설치 프로그램 (org.elasticsearch.plugins.PluginManager 프로그램이 실행됨) | ||
+ | |||
+ | <span style="color:#0000FF;">플러그인명/</span> : Plugin 설치 파일의 bin/ 폴더가 여기로 이동됨 | ||
|- | |- | ||
326번째 줄: | 340번째 줄: | ||
| style="text-align: center;" | path.conf | | style="text-align: center;" | path.conf | ||
| | | | ||
− | + | 설정 파일 폴더 | |
+ | |||
*elasticsearch.yml : ElasticSearch 설정 파일 | *elasticsearch.yml : ElasticSearch 설정 파일 | ||
+ | **path.plugins : 플러그인 설치 폴더 (Default. plugins/) | ||
*logging.yml : 로그 설정 파일 | *logging.yml : 로그 설정 파일 | ||
+ | |||
+ | <span style="color:#0000FF;">플러그인명/</span> : Plugin 설치 파일의 config/ 폴더가 여기로 이동됨 | ||
|- | |- | ||
334번째 줄: | 352번째 줄: | ||
| style="text-align: center;" | path.data | | style="text-align: center;" | path.data | ||
| | | | ||
− | + | 데이터와 인덱스를 저장하는 폴더 (elasticsearch/nodes/) | |
+ | |||
+ | *path.data: /path/to/data1,/path/to/data2 | ||
|- | |- | ||
340번째 줄: | 360번째 줄: | ||
| <br/> | | <br/> | ||
| | | | ||
− | + | ElasticSearch용 라이브러리 | |
− | + | ||
− | + | *<font color="#333333">[[Lucene|Lucene]] 검색 엔진 라이브러리</font> | |
+ | *<font color="#333333">[[Sigar|Sigar]] 라이브러리 : CPU, Memory, Disk 등을 모니터링</font> | ||
|- | |- | ||
348번째 줄: | 369번째 줄: | ||
| style="text-align: center;" | path.logs | | style="text-align: center;" | path.logs | ||
| | | | ||
− | + | 로그 파일 저장 폴더 | |
|- | |- | ||
354번째 줄: | 375번째 줄: | ||
| style="text-align: center;" | path.plugins | | style="text-align: center;" | path.plugins | ||
| | | | ||
− | + | ElasticSearch 플러그인 설치 폴더<br/><span style="color:#0000FF;">플러그인명/</span> : Plugin 설치 파일에서 bin/ 폴더와 config/ 폴더를 제외한 파일이 설치되는 폴더 | |
+ | |||
+ | *_site/ : [http://node111.jopenbusiness.com:9200/_plugin/head/ http://node111.jopenbusiness.com:9200/_plugin/head/] URL로 호출 | ||
|- | |- | ||
360번째 줄: | 383번째 줄: | ||
| style="text-align: center;" | path.work | | style="text-align: center;" | path.work | ||
| | | | ||
− | + | 임시 작업용 폴더 | |
|} | |} | ||
− | *path.home : ElasticSearch가 설치된 폴더를 지정하는 설정 변수 | + | *path.home : ElasticSearch가 설치된 폴더를 지정하는 설정 변수 |
− | |||
− | === | + | === elasticsearch.yml 설정 === |
− | + | [http://ko.wikipedia.org/wiki/YAML YAML] 문법에 따라 elasticsearch.yml 파일에서 설정 변수를 구성 합니다. | |
− | : | + | {| border="1" cellspacing="0" cellpadding="2" style="width: 100%;" |
+ | |- | ||
+ | | style="text-align: center; background-color: rgb(204, 204, 204);" | 설정 변수 | ||
+ | | style="text-align: center; background-color: rgb(204, 204, 204);" | Default | ||
+ | | style="text-align: center; background-color: rgb(204, 204, 204);" | 상세 | ||
+ | |- | ||
+ | | style="text-align: center;" | cluster.name | ||
+ | | style="text-align: center;" | elasticsearch | ||
+ | | | ||
+ | Cluster 이름<br/>data/Cluster 이름/ 폴더가 생성됨 | ||
− | + | |- | |
+ | | style="text-align: center;" | node.name | ||
+ | | style="text-align: center;" | 0, 1, 2, ...<br/>(자동 생성)<br/> | ||
+ | | | ||
+ | Node 이름<br/>data/Cluster 이름/nodes/Node 이름/ 폴더가 생성됨 | ||
− | : | + | |- |
+ | | style="text-align: center;" | | ||
+ | node.master | ||
− | + | node.data | |
− | + | node.client | |
− | : | + | | style="text-align: center;" | |
+ | true | ||
− | + | true | |
− | + | false | |
− | + | | | |
+ | Node 종류 | ||
− | * | + | *Master node |
+ | **node.master: true | ||
+ | **Cluster와 Node의 상태 정보를 관리 | ||
+ | **Index와 Shard의 조정자 역할 | ||
+ | *Data node | ||
+ | **node.data: true | ||
+ | **색인 데이터를 저장 | ||
+ | *Load Balance node | ||
+ | **node.master: false, node.data: false | ||
+ | **검색 요청을 받아 분산 처리 | ||
+ | *Client node | ||
+ | **node.client: true, node.master: false | ||
+ | **Master node로 사용하지 않고 Client node로 사용하고자 할 경우 | ||
− | : | + | |- |
+ | | style="text-align: center;" | index.number_of_shards<br/> | ||
+ | | style="text-align: center;" | 5 | ||
+ | | Shard 개수 | ||
+ | |- | ||
+ | | style="text-align: center;" | index.number_of_replicas<br/> | ||
+ | | style="text-align: center;" | 1 | ||
+ | | Replica 개수 | ||
+ | |- | ||
+ | | style="text-align: center;" | http.enabled<br/> | ||
+ | | style="text-align: center;" | true | ||
+ | | http 서비스를 활성화 합니다. | ||
+ | |- | ||
+ | | style="text-align: center;" | http.port<br/> | ||
+ | | style="text-align: center;" | 9200 | ||
+ | | http 서비스에서 사용하는 port | ||
+ | |- | ||
+ | | style="text-align: center;" | transport.tcp.port<br/> | ||
+ | | style="text-align: center;" | 9300 | ||
+ | | <font color="#333333">[[Netty|netty]]의 Transport에서 사용하는 port</font> | ||
+ | |- | ||
+ | | style="text-align: center;" | transport.tcp.compress<br/> | ||
+ | | style="text-align: center;" | | ||
+ | | true이면 Transport에서 압축 허용 | ||
+ | |- | ||
+ | | style="text-align: center;" | network.bind_host<br/> | ||
+ | | style="text-align: center;" | <br/> | ||
+ | | Client의 요청을 접수할 IP 주소 | ||
+ | |- | ||
+ | | style="text-align: center;" | network.host<br/> | ||
+ | | style="text-align: center;" | <br/> | ||
+ | | ElasticSearch Node의 IP 주소 | ||
+ | |- | ||
+ | | style="text-align: center;" | gateway.type<br/> | ||
+ | | style="text-align: center;" | local | ||
+ | | | ||
+ | Cluster의 메타 정보와 Index 설정, Mapping 정보 등을 어디서 관리할 것인지 지정 | ||
− | + | Gateway 종류 | |
− | |||
− | * | + | *local |
+ | *shared fs | ||
+ | *hadoop | ||
+ | *s3 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | style="text-align: center;" | discovery.zen.minimum_master_nodes<br/> |
− | | | + | | style="text-align: center;" | 1 |
− | + | | 최소 Master node 개수 (2개 이상 권장) | |
− | + | |- | |
− | + | | style="text-align: center;" | discovery.zen.ping.timeout<br/> | |
+ | | style="text-align: center;" | 3s | ||
+ | | <br/> | ||
+ | |- | ||
+ | | style="text-align: center;" | discovery.zen.ping.multicast.enabled<br/> | ||
+ | | style="text-align: center;" | true | ||
+ | | <br/> | ||
+ | |- | ||
+ | | style="text-align: center;" | discovery.zen.ping.unicast.hosts<br/> | ||
+ | | style="text-align: center;" | <br/> | ||
+ | | Unicast 사용시 검색할 서버와 포트<br/>예) ["host1", "host2:port"] | ||
+ | |} | ||
− | + | === Schema 설계 === | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | curl -XPUT "[http://localhost:9200/aaa?pretty=true http://localhost:9200/aaa?pretty=true]" -d @aaa.json | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | {| border="1" cellspacing="0" cellpadding="2" style="width: 100%;" | |
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | style="text-align: center; background-color: rgb(241, 241, 241);" | 단계 |
− | | | + | | style="text-align: center; background-color: rgb(241, 241, 241);" | 상세 |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | style="text-align: center;" | Entity 정의 |
− | | | + | | |
− | * | + | *Entity와 Entity Field 정의 |
− | + | *Entity간의 관계 정의 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | style="text-align: center;" | Field 정의 |
− | + | | | |
− | * | + | *검색 필드 정의 |
− | + | *통합 검색 필드 정의 | |
+ | *정렬 필드 정의 | ||
+ | *패싯 필드 정의 | ||
+ | *강조 필드 정의 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
− | === | + | == Module과 Service == |
− | |||
− | |||
− | |||
− | |||
− | + | <span style="color:#008000;">'''<span style="font-size:larger;">ElasticSearch 실행 순서</span>'''</span> | |
− | |||
− | : | ||
− | |||
− | |||
− | |||
− | : | ||
− | |||
− | * | + | *ElasticSearch |
− | :* | + | *Bootstrap |
− | + | *org.elasticsearch.node.NodeBuilder | |
+ | *org.elasticsearch.node.internal.InternalNode : 생성자 -> start() | ||
+ | **PluginsService 생성 | ||
+ | ***<span style="color:#0000FF;">Site Plugin 로딩</span> | ||
+ | ***<span style="color:#0000FF;">JVM Plugin 등록</span> | ||
+ | ****onModuleReferences에 onModule(AnyModule module) 함수 등록 | ||
+ | **Module 등록 : 여기외에 Service 등에서도 Module을 등록할 수 있음 | ||
+ | ***[[Guice|Google Guice]]의 DI (Dependency Injection) 사용 | ||
+ | ****org.elasticsearch.common.inject.Module | ||
+ | ****org.elasticsearch.common.inject.AbstractModule | ||
+ | *** | ||
+ | ***Version, PageCacheRecyclerModule, CircuitBreakerModule, BigArraysModule, <span style="color:#0000FF;">PluginsModule</span> | ||
+ | ***SettingsModule, NodeModule, NetworkModule, ScriptModule, EnvironmentModule | ||
+ | ***NodeEnvironmentModule, ClusterNameModule, ThreadPoolModule, discoveryModule, ClusterModule | ||
+ | ***RestModule, TransportModule, HttpServerModule, RiversModule, IndicesModule | ||
+ | ***SearchModule, ActionModule, MonitorModule, GatewayModule, NodeClientModule | ||
+ | ***BulkUdpModule, ShapeModule, PercolatorModule, ResourceWatcherModule, RepositoriesModule | ||
+ | ***TribeModule, BenchmarkModule | ||
+ | **Service 시작 <- LifecycleComponent (start(), stop(), close(), lifecycleState()) | ||
+ | ***AllocationService, Discovery | ||
+ | ***<span style="color:#0000FF;">PluginsService를 사용하여 Plugin에 등록된 Service 시작</span> | ||
+ | ***MappingUpdatedAction, IndicesService, IndexingMemoryController, IndicesClusterStateService, IndicesTTLService | ||
+ | ***RiversManager, SnapshotsService, ClusterService, RoutingService, SearchService | ||
+ | ***MonitorService, RestController, TransportService, DiscoveryService, GatewayService | ||
+ | ***HttpServer, BulkUdpService, ResourceWatcherService, TribeService | ||
− | + | == Plugin == | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | [[ElasticSearch - Plugin|ElasticSearch - Plugin]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | == Java 개발 환경 구성 == | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | === ElasticSearch Java 환경 구성 === | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | + | *[http://www.elasticsearch.org/download/ ElasticSearch 다운로드] 사이트에서 elasticsearch-1.2.1.zip 파일을 다운로드 합니다. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | :*lib/elasticsearch-1.2.1.jar | |
− | :* | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | + | *[https://github.com/elasticsearch/elasticsearch/ ElasticSearch github] 사이트에서 elasticsearch-master.zip 파일을 다운로드 합니다. |
− | |||
− | * | + | :*src/main/java/ 폴더 아래의 소스 파일을 사용 합니다. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | === | + | === Lucene Java 환경 구성 === |
− | |||
− | |||
− | * | + | *[http://lucene.apache.org/ Lucene] 사이트에서 "DOWNLOAD" 버튼을 눌러 lucene-4.8.1.zip 파일을 다운로드 합니다. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | :*core/lucene-core-4.8.1.jar | |
− | :* | ||
− | |||
− | + | *[http://lucene.apache.org/ Lucene] 사이트에서 "DOWNLOAD" 버튼을 눌러 lucene-4.8.1-src.tgz 파일을 다운로드 합니다. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | + | :*core/src/java/ 폴더 아래의 소스 파일을 사용 합니다. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | === Arirang Java 환경 구성 === | |
− | |||
− | |||
− | |||
− | |||
− | * | + | *[https://lucenekorean.svn.sourceforge.net/svnroot/lucenekorean/ SVN 저장소]에서 소스를 다운로드 합니다. |
− | |||
− | |||
− | |||
− | |||
− | * | + | :*arirang.morph 소스를 먼저 받아 mvn install 진행 |
− | |||
− | |||
− | |||
− | |||
− | * | + | *[http://cafe.naver.com/korlucene/1102 http://cafe.naver.com/korlucene/1102] |
− | + | *[http://svn.apache.org/repos/asf/lucene/dev/branches/lucene4956/lucene/analysis/arirang/ http://svn.apache.org/repos/asf/lucene/dev/branches/lucene4956/lucene/analysis/arirang/] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | + | *사전 구성 및 사용법 |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | + | :*[http://cafe.naver.com/korlucene/6 http://cafe.naver.com/korlucene/6] |
− | + | :*[http://cafe.naver.com/korlucene/877 http://cafe.naver.com/korlucene/877] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | ||
− | |||
− | + | [[File:Arirang 사전.zip|Arirang 사전.zip]] [http://www.jopenbusiness.com/mediawiki/images/5/54/Arirang_사전.zip http://www.jopenbusiness.com/mediawiki/images/5/54/Arirang_사전.zip] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ==== | + | == REST API == |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | + | *[[ElasticSearch - REST API|ElasticSearch - REST API]] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | | | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==JAVA API== | ==JAVA API== | ||
1,163번째 줄: | 656번째 줄: | ||
===get java api=== | ===get java api=== | ||
− | ==관리자 매뉴얼== | + | == 관리자 매뉴얼 == |
− | ===elasticsearch.yml=== | + | |
+ | === 사전 구성 === | ||
+ | |||
+ | #국어 사전 | ||
+ | #온라인 사전을 통해서 주기적으로 갱신 | ||
+ | #위키에 등록된 명사로 주기적으로 갱신 | ||
+ | |||
+ | === elasticsearch.yml === | ||
+ | |||
*index.query.bool.max_clause_count | *index.query.bool.max_clause_count | ||
− | ===오류 처리=== | + | |
+ | === 오류 처리 === | ||
+ | |||
*Heap 메모리 부족시 | *Heap 메모리 부족시 | ||
+ | |||
:*vi /nas/appl/elasticsearch/bin/elasticsearch.in.sh | :*vi /nas/appl/elasticsearch/bin/elasticsearch.in.sh | ||
+ | |||
#ES_MIN_MEM=256m | #ES_MIN_MEM=256m | ||
#ES_MAX_MEM=1g | #ES_MAX_MEM=1g | ||
1,176번째 줄: | 681번째 줄: | ||
*많은 Client에서 접속하여, 파일 개수 부족으로 오류 발생시 | *많은 Client에서 접속하여, 파일 개수 부족으로 오류 발생시 | ||
+ | |||
:*오류 메시지 | :*오류 메시지 | ||
+ | |||
org.elasticsearch.common.netty.channel.ChannelException: Failed to create a selector. | org.elasticsearch.common.netty.channel.ChannelException: Failed to create a selector. | ||
Caused by: java.io.IOException: Too many open files | Caused by: java.io.IOException: Too many open files | ||
+ | |||
:*조치 방법 | :*조치 방법 | ||
+ | |||
ulimit -n | ulimit -n | ||
vi /etc/security/limits.conf | vi /etc/security/limits.conf | ||
− | + | hduser soft nofile 999999 | |
− | + | hduser hard nofile 999999 | |
− | ==참고 문헌== | + | == 참고 문헌 == |
− | |||
− | |||
− | |||
− | |||
− | * | + | *[[ElasticSearch - Plugin|ElasticSearch - Plugin]] |
− | * | + | *[[ElasticSearch - REST API|ElasticSearch - REST API]] |
− | *https://www.found.no/tag/Elasticsearch/ | + | |
− | :*https://www.found.no/search/#search/query=ElasticSearch | + | |
− | :*https://www.found.no/foundation/elasticsearch-internals/ | + | *[http://openhangul.com/ 한글 오픈데이터 플랫폼] |
+ | *[[RegExp|RegExp]] | ||
+ | *[[Nutch|Nutch]] | ||
+ | *[[Lucene|Lucene]] / [[Solr|Solr]] | ||
+ | *[[Sigar|Sigar]] | ||
+ | *[[Kibana|Kibana]] : ElasticSearch의 데이터로 대시보드를 생성 | ||
+ | *[[Fluentd|fluentd]] | ||
+ | |||
+ | *[http://guruble.wordpress.com/tag/elasticsearch/ http://guruble.wordpress.com/tag/elasticsearch/] | ||
+ | *[http://www.youtube.com/watch?v=6qpVJPNEkWc http://www.youtube.com/watch?v=6qpVJPNEkWc] | ||
+ | |||
+ | *[https://www.found.no/tag/Elasticsearch/ https://www.found.no/tag/Elasticsearch/] | ||
+ | |||
+ | :*[https://www.found.no/search/#search/query=ElasticSearch https://www.found.no/search/#search/query=ElasticSearch] | ||
+ | :*[https://www.found.no/foundation/elasticsearch-internals/ https://www.found.no/foundation/elasticsearch-internals/] | ||
:*[https://code.google.com/p/google-guice/ Guice] | :*[https://code.google.com/p/google-guice/ Guice] | ||
:*[http://en.wikipedia.org/wiki/Dependency_injection Dependency injection] | :*[http://en.wikipedia.org/wiki/Dependency_injection Dependency injection] | ||
:*[http://www.jamesshore.com/Blog/Dependency-Injection-Demystified.html Dependency Injection Demystified, 2006.03] | :*[http://www.jamesshore.com/Blog/Dependency-Injection-Demystified.html Dependency Injection Demystified, 2006.03] | ||
− | *http://jjeong.tistory.com/ | + | *[http://jjeong.tistory.com/ http://jjeong.tistory.com/] |
+ | |||
:*[http://jjeong.tistory.com/m/post/958 Elasticsearch: lucene arirang analyzer plugin, 2014.04] | :*[http://jjeong.tistory.com/m/post/958 Elasticsearch: lucene arirang analyzer plugin, 2014.04] | ||
:*[http://jjeong.tistory.com/957 lucene: arirang maven build 하기, 2014.04] | :*[http://jjeong.tistory.com/957 lucene: arirang maven build 하기, 2014.04] | ||
1,207번째 줄: | 727번째 줄: | ||
:*[http://jjeong.tistory.com/743 elasticsearch 한국어 형태소분석기 분석의 이해, 2013.01] | :*[http://jjeong.tistory.com/743 elasticsearch 한국어 형태소분석기 분석의 이해, 2013.01] | ||
− | *http://cafe.naver.com/korlucene | + | *[http://cafe.naver.com/korlucene http://cafe.naver.com/korlucene] |
*Helloworld naver | *Helloworld naver | ||
− | :*http://helloworld.naver.com/helloworld/645609 | + | |
+ | :*[http://helloworld.naver.com/helloworld/645609 http://helloworld.naver.com/helloworld/645609] | ||
:*[http://helloworld.naver.com/helloworld/273788 elasticsearch로 로그 검색 시스템 만들기, 2013.02] | :*[http://helloworld.naver.com/helloworld/273788 elasticsearch로 로그 검색 시스템 만들기, 2013.02] | ||
*[http://www.sejong.or.kr/ 21세기 세종계획] | *[http://www.sejong.or.kr/ 21세기 세종계획] | ||
*[http://nlp.postech.ac.kr/Course/CS730b/2005/ Statistical Natural Language Processing] | *[http://nlp.postech.ac.kr/Course/CS730b/2005/ Statistical Natural Language Processing] | ||
+ | |||
:*[http://hegel.postech.ac.kr:5000/Research/POSTAG/sejong/postag_sejong_k.php POSTAG_SEJONG/K] | :*[http://hegel.postech.ac.kr:5000/Research/POSTAG/sejong/postag_sejong_k.php POSTAG_SEJONG/K] | ||
− | *http://elasticsearch-kr.github.io | + | *[http://elasticsearch-kr.github.io http://elasticsearch-kr.github.io] |
− | *https://github.com/imotov/elasticsearch-facet-script | + | *[https://github.com/imotov/elasticsearch-facet-script https://github.com/imotov/elasticsearch-facet-script] |
− | *https://www.found.no/foundation/writing-a-plugin/ | + | *[https://www.found.no/foundation/writing-a-plugin/ https://www.found.no/foundation/writing-a-plugin/] |
− | *http://en.wikipedia.org/wiki/ElasticSearch | + | *[http://en.wikipedia.org/wiki/ElasticSearch http://en.wikipedia.org/wiki/ElasticSearch] |
*[http://socurites.com/122 로그 파일에 대해 Elasticsearch 사용하기, 2012.10] | *[http://socurites.com/122 로그 파일에 대해 Elasticsearch 사용하기, 2012.10] | ||
*[http://misoin.tistory.com/27 elasticsearch (검색엔진) 설치 – 한글형태소분석기 적용, 2012.12] | *[http://misoin.tistory.com/27 elasticsearch (검색엔진) 설치 – 한글형태소분석기 적용, 2012.12] | ||
1,230번째 줄: | 752번째 줄: | ||
*[https://gist.github.com/rajraj/1556657 Install ElasticSearch on CentOS 6] | *[https://gist.github.com/rajraj/1556657 Install ElasticSearch on CentOS 6] | ||
*[http://misoin.tistory.com/m/27 elasticsearch cluster 설치 + 한글형태소분석기, 2012.12] | *[http://misoin.tistory.com/m/27 elasticsearch cluster 설치 + 한글형태소분석기, 2012.12] | ||
+ | *[http://linuxism.tistory.com/1554 http://linuxism.tistory.com/1554] | ||
+ | |||
+ | *ElasticSearch ([http://guruble.wordpress.com/tag/elasticsearch/ http://guruble.wordpress.com/tag/elasticsearch/]) | ||
− | |||
:*[http://guruble.wordpress.com/2014/02/23/elasticsearch-1-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0/ Elasticsearch - 1. 시작하기] | :*[http://guruble.wordpress.com/2014/02/23/elasticsearch-1-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0/ Elasticsearch - 1. 시작하기] | ||
:*[http://guruble.wordpress.com/2014/02/23/elasticsearch-2-shard-replica/ Elasticsearch - 2. Shard & Replica] | :*[http://guruble.wordpress.com/2014/02/23/elasticsearch-2-shard-replica/ Elasticsearch - 2. Shard & Replica] | ||
:*[http://guruble.wordpress.com/2014/02/24/elasticsearch-3-node-discovery/ Elasticsearch - 3. Node Discovery] | :*[http://guruble.wordpress.com/2014/02/24/elasticsearch-3-node-discovery/ Elasticsearch - 3. Node Discovery] | ||
− | *http://blog.naver.com/PostView.nhn?blogId=sung487&logNo=10164948506 | + | *[http://blog.naver.com/PostView.nhn?blogId=sung487&logNo=10164948506 http://blog.naver.com/PostView.nhn?blogId=sung487&logNo=10164948506] |
*MeCab (C++로 작성) | *MeCab (C++로 작성) | ||
− | |||
− | |||
− | |||
− | [[Category:Search]] | + | :*[https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/raw/master/elasticsearch-analysis-mecab-ko/ https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/raw/master/elasticsearch-analysis-mecab-ko/] (최신) |
− | [[Category:BigData]] | + | :*[https://github.com/bibreen/mecab-ko-lucene-analyzer https://github.com/bibreen/mecab-ko-lucene-analyzer] (예전 버전) |
+ | ::*[https://github.com/bibreen/mecab-ko-lucene-analyzer/tree/master/elasticsearch-analysis-mecab-ko https://github.com/bibreen/mecab-ko-lucene-analyzer/tree/master/elasticsearch-analysis-mecab-ko] | ||
+ | |||
+ | *http://www.acornpub.co.kr/book/elasticsearch-server | ||
+ | |||
+ | [[Category:Search|Category:Search]]<br/>[[Category:BigData|Category:BigData]] |
2014년 11월 11일 (화) 12:24 기준 최신판
Lucene을 바탕으로 개발한 분산 검색엔진인 ElasticSearch를 정리 합니다.
- 라이선스 : Apache 2.0
- 플랫폼 : Java
목차
ElasticSearch 개요
Lucene은 널리 알려진 Java 기반의 오픈소스 검색 엔진 라이브러리 입니다. 많은 곳에서 사용 되고 있지만 라이브러리 형태라 사용에 불편함이 있고 BigData 시대를 맞아 분산 환경을 지원하지 않아 새로운 대안 솔루션이 필요하게 되었습니다. 오픈소스 진영에서는 분산 환경을 지원하는 Solr와 ElasticSearch가 Lucene 기반으로 작성이 되었습니다. ElasticSearch는 RESTful API를 지원하는 특성으로 인하여 여러 환경으로 포팅이 될 수 있어서 사용이 편리한 분산 검색 엔진 입니다.
ElasticSearch의 특징
- 실시간 검색 및 분석
- 분산 구성 및 병렬 처리
- index (Database)와 Type (Table)을 사용하여 다양한 문서 처리
- JSON을 사용하는 RESTful API 지원
- Plugin 방식의 기능 확장
ElasticSearch 용어
용어 | 상세 |
Cluster |
|
Node |
|
Index |
|
Shard |
|
Type (Document Type) |
|
Mapping |
|
Route |
|
Document |
|
Field |
|
Gateway |
|
Query |
|
TermQuery |
|
Term |
|
Token |
|
ElasticSearch의 개념적 구성도
- ElasticSearch Architecture
- _index : index 이름
- _type : type 이름
- _id : Document ID
- _score
- _source : Document 저장
- properties
- 필드명 (field)
- type : string
ElasticSearch 관련 오픈소스
ElasticSearch 설치
CentOS에서 ElasticSearch 설치
ElasticSearch 설치
- ElasticSearch 설치
- JDK 1.7 이상 필요
cd install wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.tar.gz tar -xvzf elasticsearch-1.3.2.tar.gz chown -R hduser:hdgroup elasticsearch-1.3.2 mv elasticsearch-1.3.2 /nas/appl/elasticsearch
- 환경 설정
- vi ~hduser/.bash_profile
### ---------------------------------------------------------------------------- ### ELASTICSEARCH 설정 ### ---------------------------------------------------------------------------- export ELASTICSEARCH_HOME=/nas/appl/elasticsearch export PATH=$PATH:$ELASTICSEARCH_HOME/bin
- ElasticSearch 환경 설정
- 데이터와 로그 폴더 생성
cd /nas/appl/elasticsearch mkdir data mkdir logs chown hduser:hdgroup data logs
- vi /nas/appl/elasticsearch/config/elasticsearch.yml
cluster.name: elasticsearch node.name: "node201" path.data: /nas/appl/elasticsearch/data path.logs: /nas/appl/elasticsearch/logs discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["node201:9200"] bootstrap.mlockall: true
- 서비스 실행 및 확인
su - hduser elasticsearch #--- Foreground로 실행 elasticsearch -d #--- Daemon으로 실행 curl localhost:9200 #--- 서비스 확인 http://node201.hadoop.com:9200/ #--- 서비스 확인 http://node201.hadoop.com:9200/_status http://node201.hadoop.com:9200/_plugin/head/ #--- elasticsearch-head plugin이 설치된 경우
ElasticSearch 로드밸런서 설치
- ElasticSearch 로드밸런서 환경 설정
- vi /nas/appl/elasticsearch/config/elasticsearch.yml
node.master: false node.data: false network.bind_host: 192.168.0.1
- 로드밸런서용 plugin 설치
plugin -install mobz/elasticsearch-head plugin -install lukas-vlcek/bigdesk
환경 설정
- 환경 변수
- bin/elasticsearch 환경변수
- JAVA_OPTS
- ES_JAVA_OPTS, ES_HEAP_SIZE
- ES_MIN_MEM=256m, ES_MAX_MEM=1gb
- 환경 설정 방법
- 환경 설정 파일로 설정
vi /nas/appl/elasticsearch/config/elasticsearch.yml index: store: type: memory
- 명령행 옵션으로 설정
elasticsearch -Des.index.store.type=memory
- REST API로 설정
curl -XPUT 'node201.hadoop.com:9200/customer/ -d ' index: store: type: memory '
- file descriptors 확인
- max_file_descriptors
curl 'node201.hadoop.com:9200/_nodes/process?pretty'
- memory settings : disable swap
- 한번만 적용
swapoff -a
- 항상 적용
vi /etc/fstab #--- swap을 주석 처리
- ElasticSearch 설정으로 처리
ulimit -l unlimited #--- root 사용자로 실행 mkdir /tmp/tmpJna vi config/elasticsearch.yml bootstrap.mlockall: true elasticsearch -Djna.tmpdir=/tmp/tmpJna
Service로 실행
- 환경 설정 변수
- ES_USER, ES_GROUP
- ES_HEAP_SIZE, ES_HEAP_NEWSIZE, ES_DIRECT_SIZE
- MAX_OPEN_FILES
- MAX_LOCKED_MEMORY, MAX_MAP_COUNT
- LOG_DIR, DATA_DIR, WORK_DIR
- CONF_DIR, CONF_FILE
- ES_JAVA_OPTS, RESTART_ON_UPGRADE
#--- /etc/init.d/elasticsearch #--- /etc/sysconfig/elasticsearch /sbin/chkconfig --add elasticsearch
Windows에서 ElasticSearch 설치
ElasticSearch 설치
ElasticSearch는 JDK 7 이상에서 실행되는 Java 기반의 애플리케이션으로 별도의 설치 과정 없이 소스를 다운로드 받아 실행하면 됩니다. 다운로드 사이트(http://www.elasticsearch.org/download/)에서 최신 버전(elasticsearch-1.3.2.zip)의 ElasticeSearch를 다운로드 합니다. 압축을 풀어 c:/appl/elasticsearch/ 폴더를 생성 합니다.
실행 및 확인
bin/ 폴더에서 elasticsearch.bat 파일을 실행 합니다.
브라우저에서 http://localhost:9200/ 로 접속하여 확인 합니다.
Cluster 정보 확인
Node 정보 확인
ElasticSearch 설정
ElasticSearch 폴더 구조
폴더 | 설정 변수 | 상세 |
bin |
윈도우용 실행 파일
Linux용 실행 파일
플러그인명/ : Plugin 설치 파일의 bin/ 폴더가 여기로 이동됨 | |
config | path.conf |
설정 파일 폴더
플러그인명/ : Plugin 설치 파일의 config/ 폴더가 여기로 이동됨 |
data | path.data |
데이터와 인덱스를 저장하는 폴더 (elasticsearch/nodes/)
|
lib |
ElasticSearch용 라이브러리 | |
logs | path.logs |
로그 파일 저장 폴더 |
plugins | path.plugins |
ElasticSearch 플러그인 설치 폴더
|
work | path.work |
임시 작업용 폴더 |
- path.home : ElasticSearch가 설치된 폴더를 지정하는 설정 변수
elasticsearch.yml 설정
YAML 문법에 따라 elasticsearch.yml 파일에서 설정 변수를 구성 합니다.
설정 변수 | Default | 상세 |
cluster.name | elasticsearch |
Cluster 이름 |
node.name | 0, 1, 2, ... (자동 생성) |
Node 이름 |
node.master node.data node.client |
true true false |
Node 종류
|
index.number_of_shards |
5 | Shard 개수 |
index.number_of_replicas |
1 | Replica 개수 |
http.enabled |
true | http 서비스를 활성화 합니다. |
http.port |
9200 | http 서비스에서 사용하는 port |
transport.tcp.port |
9300 | netty의 Transport에서 사용하는 port |
transport.tcp.compress |
true이면 Transport에서 압축 허용 | |
network.bind_host |
Client의 요청을 접수할 IP 주소 | |
network.host |
ElasticSearch Node의 IP 주소 | |
gateway.type |
local |
Cluster의 메타 정보와 Index 설정, Mapping 정보 등을 어디서 관리할 것인지 지정 Gateway 종류
|
discovery.zen.minimum_master_nodes |
1 | 최소 Master node 개수 (2개 이상 권장) |
discovery.zen.ping.timeout |
3s | |
discovery.zen.ping.multicast.enabled |
true | |
discovery.zen.ping.unicast.hosts |
Unicast 사용시 검색할 서버와 포트 예) ["host1", "host2:port"] |
Schema 설계
curl -XPUT "http://localhost:9200/aaa?pretty=true" -d @aaa.json
단계 | 상세 |
Entity 정의 |
|
Field 정의 |
|
Module과 Service
ElasticSearch 실행 순서
- ElasticSearch
- Bootstrap
- org.elasticsearch.node.NodeBuilder
- org.elasticsearch.node.internal.InternalNode : 생성자 -> start()
- PluginsService 생성
- Site Plugin 로딩
- JVM Plugin 등록
- onModuleReferences에 onModule(AnyModule module) 함수 등록
- Module 등록 : 여기외에 Service 등에서도 Module을 등록할 수 있음
- Google Guice의 DI (Dependency Injection) 사용
- org.elasticsearch.common.inject.Module
- org.elasticsearch.common.inject.AbstractModule
- Version, PageCacheRecyclerModule, CircuitBreakerModule, BigArraysModule, PluginsModule
- SettingsModule, NodeModule, NetworkModule, ScriptModule, EnvironmentModule
- NodeEnvironmentModule, ClusterNameModule, ThreadPoolModule, discoveryModule, ClusterModule
- RestModule, TransportModule, HttpServerModule, RiversModule, IndicesModule
- SearchModule, ActionModule, MonitorModule, GatewayModule, NodeClientModule
- BulkUdpModule, ShapeModule, PercolatorModule, ResourceWatcherModule, RepositoriesModule
- TribeModule, BenchmarkModule
- Google Guice의 DI (Dependency Injection) 사용
- Service 시작 <- LifecycleComponent (start(), stop(), close(), lifecycleState())
- AllocationService, Discovery
- PluginsService를 사용하여 Plugin에 등록된 Service 시작
- MappingUpdatedAction, IndicesService, IndexingMemoryController, IndicesClusterStateService, IndicesTTLService
- RiversManager, SnapshotsService, ClusterService, RoutingService, SearchService
- MonitorService, RestController, TransportService, DiscoveryService, GatewayService
- HttpServer, BulkUdpService, ResourceWatcherService, TribeService
- PluginsService 생성
Plugin
Java 개발 환경 구성
ElasticSearch Java 환경 구성
- ElasticSearch 다운로드 사이트에서 elasticsearch-1.2.1.zip 파일을 다운로드 합니다.
- lib/elasticsearch-1.2.1.jar
- ElasticSearch github 사이트에서 elasticsearch-master.zip 파일을 다운로드 합니다.
- src/main/java/ 폴더 아래의 소스 파일을 사용 합니다.
Lucene Java 환경 구성
- Lucene 사이트에서 "DOWNLOAD" 버튼을 눌러 lucene-4.8.1.zip 파일을 다운로드 합니다.
- core/lucene-core-4.8.1.jar
- Lucene 사이트에서 "DOWNLOAD" 버튼을 눌러 lucene-4.8.1-src.tgz 파일을 다운로드 합니다.
- core/src/java/ 폴더 아래의 소스 파일을 사용 합니다.
Arirang Java 환경 구성
- SVN 저장소에서 소스를 다운로드 합니다.
- arirang.morph 소스를 먼저 받아 mvn install 진행
- http://cafe.naver.com/korlucene/1102
- http://svn.apache.org/repos/asf/lucene/dev/branches/lucene4956/lucene/analysis/arirang/
- 사전 구성 및 사용법
파일:Arirang 사전.zip http://www.jopenbusiness.com/mediawiki/images/5/54/Arirang_사전.zip
REST API
JAVA API
Client
import static org.elasticsearch.node.NodeBuilder.nodeBuilder; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.node.Node; private Boolean getTransportClient() { Settings settings = null; settings = ImmutableSettings.settingsBuilder().put("cluster.name", CLUSTER_NAME).build(); client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(HOST, PORT)); return true; } //--- elasticsearch.yml //--- cluster.name=~ private Boolean getNodeClient() { node = nodeBuilder().clusterName(CLUSTER_NAME).client(true).local(true).node(); client = node.client(); return true; }
index java api
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; import org.elasticsearch.action.index.IndexResponse; json = jsonBuilder().startObject() .field("name", "value") .endObject().string(); res = client.prepareIndex("index", "type", "id").setSource(json).execute().actionGet(); UtilLogger.info.print(logCaller, "_index : " + res.getIndex()); UtilLogger.info.print(logCaller, "_type : " + res.getType()); UtilLogger.info.print(logCaller, "_id : " + res.getId()); UtilLogger.info.print(logCaller, "_version : " + res.getVersion()); UtilLogger.info.print(logCaller, "_index : " + res.getIndex());
get java api
관리자 매뉴얼
사전 구성
- 국어 사전
- 온라인 사전을 통해서 주기적으로 갱신
- 위키에 등록된 명사로 주기적으로 갱신
elasticsearch.yml
- index.query.bool.max_clause_count
오류 처리
- Heap 메모리 부족시
- vi /nas/appl/elasticsearch/bin/elasticsearch.in.sh
#ES_MIN_MEM=256m #ES_MAX_MEM=1g ES_MIN_MEM=4g ES_MAX_MEM=4g
- 많은 Client에서 접속하여, 파일 개수 부족으로 오류 발생시
- 오류 메시지
org.elasticsearch.common.netty.channel.ChannelException: Failed to create a selector. Caused by: java.io.IOException: Too many open files
- 조치 방법
ulimit -n vi /etc/security/limits.conf hduser soft nofile 999999 hduser hard nofile 999999
참고 문헌
- Helloworld naver
- http://en.wikipedia.org/wiki/ElasticSearch
- 로그 파일에 대해 Elasticsearch 사용하기, 2012.10
- elasticsearch (검색엔진) 설치 – 한글형태소분석기 적용, 2012.12
- ElasticSearch 설치 및 샘플 사용기, 2012.02
- elasticsearch로 로그 검색 시스템 만들기, 2013.02
- Install ElasticSearch on CentOS 6
- elasticsearch cluster 설치 + 한글형태소분석기, 2012.12
- http://linuxism.tistory.com/1554
- ElasticSearch (http://guruble.wordpress.com/tag/elasticsearch/)
- MeCab (C++로 작성)