Elasticsearch Java client DSL로 작성한 Request의 실제 Query 확인하기

과거엔 SearchRequestBuilder에 internalBuilder()라는 method가 있었지만, 지금은 toString() 내부에서 수행되는 것으로 변경되었습니다. SearchRequestBuilder sb = client.prepareSearch("activities") .setQuery(queryBuilder) .setSize(0) .addAggregation(sigterm); logger.info("internal query : " + sb.toString());

과거엔 SearchRequestBuilder에 internalBuilder()라는 method가 있었지만, 지금은 toString() 내부에서 수행되는 것으로 변경되었습니다. 


SearchRequestBuilder sb = client.prepareSearch("activities")
.setQuery(queryBuilder)
.setSize(0)
.addAggregation(sigterm);

logger.info("internal query : " + sb.toString());


</div>-->
Programming/ElasticSearch 2017. 11. 1. 10:57
ES Java client 사용시 availableProcessors is already set to [8], rejecting [8] 발생

netty를 사용하는 모듈과 충돌이 발생하는 경우이다. Elasticsearch client 초기화 시점을 앞당기거나 system property es.set.netty.runtime.available.processors 를 false로 세팅해서 해결한다. java.lang.IllegalStateException: availableProcessors is already set to [8], rejecting [8]at io.netty.util.NettyRuntime$AvailableProcessorsHolder.setAvailableProcessors(NettyRuntime.java:51)at io.netty.util.NettyRuntime.setAvailableProcessors(NettyRuntime..

netty를 사용하는 모듈과 충돌이 발생하는 경우이다. 


Elasticsearch client 초기화 시점을 앞당기거나 system property es.set.netty.runtime.available.processors 를 false로 세팅해서 해결한다. 

java.lang.IllegalStateException: availableProcessors is already set to [8], rejecting [8]

at io.netty.util.NettyRuntime$AvailableProcessorsHolder.setAvailableProcessors(NettyRuntime.java:51)

at io.netty.util.NettyRuntime.setAvailableProcessors(NettyRuntime.java:87)

at org.elasticsearch.transport.netty4.Netty4Utils.setAvailableProcessors(Netty4Utils.java:87)

at org.elasticsearch.transport.netty4.Netty4Transport.<init>(Netty4Transport.java:139)

at org.elasticsearch.transport.Netty4Plugin.lambda$getTransports$0(Netty4Plugin.java:93)

at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:174)

at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:265)

at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:130)

at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:116)

at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:106)

at kr.bluewhale.elastic.broker.ElasticQueryThread.run(ElasticQueryThread.java:40)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)



System.setProperty("es.set.netty.runtime.available.processors", "false");


</div>-->
Programming/ElasticSearch 2017. 10. 31. 19:14
Elasticsearch java client 사용시 java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin 발생하는 경우

아래와 같이 Elasticsearch java client 사용시 java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin 발생하거나 FiltersAggregator.KeyedFilter와 같은 API들을 찾을 수 없는 경우가 있다. java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPluginat java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader.java:763)at java.security.SecureClassLoader.defineClass..


아래와 같이 Elasticsearch java client 사용시 java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin 발생하거나 FiltersAggregator.KeyedFilter와 같은 API들을 찾을 수 없는 경우가 있다. 

java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:763)

at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)

at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)

at java.net.URLClassLoader.access$100(URLClassLoader.java:73)

at java.net.URLClassLoader$1.run(URLClassLoader.java:368)

at java.net.URLClassLoader$1.run(URLClassLoader.java:362)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:361)

at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

at org.elasticsearch.transport.client.PreBuiltTransportClient.<clinit>(PreBuiltTransportClient.java:88)

at kr.bluewhale.elastic.broker.ElasticQueryThread.run(ElasticQueryThread.java:37)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.ClassNotFoundException: org.elasticsearch.plugins.NetworkPlugin

at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

... 16 more


그럴땐, org.elasticsearch.elasticsearch가 dependency에 정의되어있는지 확인해보자. 

<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.6.3</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.6.3</version>
</dependency>


</div>-->
Programming/ElasticSearch 2017. 10. 31. 19:07
Elasticsearch) Painless script를 이용해서 값을 변경하기

https://www.elastic.co/guide/en/elasticsearch/painless/5.6/painless-examples.html curl -XPUT 'http://35.200.56.48:9200/online-shop' curl -XPUT 'http://35.200.56.48:9200/online-shop/_mapping/shirts' -d '{"shirts": {"properties": { "caption": { "type": "string"}, "price": {"type": "long"}}}}' curl -XPUT 'http://35.200.56.48:9200/online-shop/shirts/1' -d '{ "caption": "Learning ES", "price": 15}' c..

https://www.elastic.co/guide/en/elasticsearch/painless/5.6/painless-examples.html


curl -XPUT 'http://35.200.56.48:9200/online-shop'


curl -XPUT 'http://35.200.56.48:9200/online-shop/_mapping/shirts' -d '{

"shirts": {

"properties": { 

"caption": { 

"type": "string"

}, 

"price": {

"type": "long"

}

}

}

}'


curl -XPUT 'http://35.200.56.48:9200/online-shop/shirts/1' -d '{

    "caption": "Learning ES",

    "price": 15

}'


curl -XPOST 'http://35.200.56.48:9200/online-shop/shirts/1/_update' -d '{

    "script": {

    "lang": "painless",

    "source": "ctx._source.price += params.price_diff",

    "params": {

    "price_diff": 10

    }

    }

}'


</div>-->
Programming/ElasticSearch 2017. 10. 19. 20:38
은전한닢 설치하기

mecab-ko-dic 설치mecab-ko-dic은 오픈 소스 형태소 분석 엔진인 MeCab을 사용하여, 한국어 형태소 분석을 하기 위한 프로젝트입니다. 말뭉치 학습과 사전 목록 일부는 21세기 세종계획의 성과물을 사용하였습니다.mecab-ko-dic은 21세기 세종계획 모든 현대 말뭉치에서 50문장씩을 추출하여 학습에 이용하였습니다. (총 23,615 문장) mecab-ko-dic은 아파치 라이센스 2.0에 따라 소프트웨어를 사용, 재배포 할 수 있습니다.설치 및 사용mecab-ko-dic을 설치하고 사용하기 위해서 다음과 같은 작업이 필요합니다. 모든 작업은 Linux 기준입니다. 양해바랍니다.mecab-ko 설치mecab-ko는 한국어의 특성에 맞는 기능이 추가된 MeCab의 fork 프로젝트입니다..


mecab-ko-dic 설치

mecab-ko-dic은 오픈 소스 형태소 분석 엔진인 MeCab을 사용하여, 한국어 형태소 분석을 하기 위한 프로젝트입니다. 말뭉치 학습과 사전 목록 일부는 21세기 세종계획의 성과물을 사용하였습니다.

mecab-ko-dic은 21세기 세종계획 모든 현대 말뭉치에서 50문장씩을 추출하여 학습에 이용하였습니다. (총 23,615 문장)

mecab-ko-dic은 아파치 라이센스 2.0에 따라 소프트웨어를 사용, 재배포 할 수 있습니다.

설치 및 사용

mecab-ko-dic을 설치하고 사용하기 위해서 다음과 같은 작업이 필요합니다. 모든 작업은 Linux 기준입니다. 양해바랍니다.

mecab-ko 설치

mecab-ko는 한국어의 특성에 맞는 기능이 추가된 MeCab의 fork 프로젝트입니다.

mecab-ko 다운로드 페이지 에서 mecab-ko의 소스를 다운 받고 설치합니다. tar.gz를 압축 해제하시고 일반적인 자유 소프트웨어와 같은 순서로 설치할 수 있습니다.

$ tar zxfv mecab-XX-ko-XX.tar.gz
$ cd mecab-XX-ko-XX
$ ./configure 
$ make
$ make check
$ su
# make install

자세한 내용은 다음의 URL을 참조하시기 바랍니다.

mecab-ko-dic 다운로드

mecab-ko-dic 다운로드 페이지 에서 mecab-ko-dic의 최신 버전을 다운 받습니다.

mecab-ko-dic 설치

tar.gz를 압축 해제하시고 일반적인 자유 소프트웨어와 같은 순서로 설치할 수 있습니다. 기본으로 /usr/local/lib/mecab/dic/mecab-ko-dic에 설치됩니다.

$ tar zxfv mecab-ko-dic-XX.tar.gz
$ cd mecab-ko-dic-XX
$ ./configure 
$ make
$ su
# make install

automake 버전 문제로 설치 도중 에러가 나는 경우, 다음과 같이 할 수 있습니다.

  • automake1.11 설치 후, 위와 동일하게 재시도 혹은,
  • autogen.sh 실행 후 재시도

    $ tar zxfv mecab-ko-dic-XX.tar.gz
    $ cd mecab-ko-dic-XX
    $ ./autogen.sh
    $ configure
    $ make
    $ su
    # make install
    

libmecab.so.2를 찾을 수 없는 에러가 나는 경우, 다음과 같이 할 수 있습니다.

  • 라이브러리를 다시 링크하고 확인후 재시도

    $ sudo ldconfig
    

사용

다음과 같이 mecab을 실행하여 한국어 형태소 분석 결과를 보실 수 있습니다.

$ mecab -d /usr/local/lib/mecab/dic/mecab-ko-dic
mecab-ko-dic은 MeCab을 사용하여, 한국어 형태소 분석을 하기 위한 프로젝트입니다.
mecab    SL,*,*,*,*,*,*,*
-    SY,*,*,*,*,*,*,*
ko    SL,*,*,*,*,*,*,*
-    SY,*,*,*,*,*,*,*
dic    SL,*,*,*,*,*,*,*
은    JX,*,T,은,*,*,*,*
MeCab    SL,*,*,*,*,*,*,*
을    JKO,*,T,을,*,*,*,*
사용    NNG,*,T,사용,*,*,*,*
하    XSV,*,F,하,*,*,*,*
여    EC,*,F,여,*,*,*,*
,    SC,*,*,*,*,*,*,*
한국어    NNG,*,F,한국어,Compound,*,*,한국/NNG/*+어/NNG/*
형태소    NNG,*,F,형태소,Compound,*,*,형태/NNG/*+소/NNG/*
분석    NNG,*,T,분석,*,*,*,*
을    JKO,*,T,을,*,*,*,*
하    VV,*,F,하,*,*,*,*
기    ETN,*,F,기,*,*,*,*
위한    VV+ETM,*,T,위한,Inflect,VV,ETM,위하/VV/*+ᆫ/ETM/*
프로젝트    NNG,*,F,프로젝트,*,*,*,*
입니다    VCP+EF,*,F,입니다,Inflect,VCP,EF,이/VCP/*+ᄇ니다/EF/*
.    SF,*,*,*,*,*,*,*
EOS


Elasticsearch Plugin 설치


Elasticsearch Plugin 설치는 아래와 같이 수행하면 되지만, 그냥 수행하면 최신 Elasticsearch와 버전이 맞지 않아 오류가 발생할 것이다. 


$ ./bin/elasticsearch-plugin install https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/issues/attachments/7/eunjeon/mecab-ko-lucene-analyzer/1486603969.8/7/elasticsearch-analysis-mecab-ko-5.2.0.0.zip
~/elasticsearch-5.6.1$ ./bin/elasticsearch-plugin install https://bitbucket.org/eunjeon/mecab-ko-l
ucene-analyzer/issues/attachments/9/eunjeon/mecab-ko-lucene-analyzer/1500357175.91/9/elasticsearch-analysis-mecab-k
o-5.5.0.0.zip
-> Downloading https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/issues/attachments/9/eunjeon/mecab-ko-lucene-
analyzer/1500357175.91/9/elasticsearch-analysis-mecab-ko-5.5.0.0.zip
[=================================================] 100%   
Exception in thread "main" java.lang.IllegalArgumentException: plugin [elasticsearch-analysis-mecab-ko] is incompat
ible with version [5.6.1]; was designed for version [5.5.0]
        at org.elasticsearch.plugins.PluginInfo.readFromProperties(PluginInfo.java:146)
        at org.elasticsearch.plugins.InstallPluginCommand.verify(InstallPluginCommand.java:474)
        at org.elasticsearch.plugins.InstallPluginCommand.install(InstallPluginCommand.java:543)
        at org.elasticsearch.plugins.InstallPluginCommand.execute(InstallPluginCommand.java:217)
        at org.elasticsearch.plugins.InstallPluginCommand.execute(InstallPluginCommand.java:201)
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134)
        at org.elasticsearch.cli.MultiCommand.execute(MultiCommand.java:69)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134)
        at org.elasticsearch.cli.Command.main(Command.java:90)



최신버전의 plugin file을 https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/issues?status=new&status=open 에서 찾아 다운받고 압축을 푼 다음 plugin-descriptor.properties 파일 내용중 elasticsearch.version을 현재 설치된 es version으로 수정한다. 


elasticsearch.version=5.6.1


작업한 elasticsearch directory를 zip으로 다시 압축하고 아래 명령어를 수행한다. 


zip -r elasticsearch ea561.zip


./bin/elasticsearch-plugin install file:/home/es/ea561.zip



참고링크) 

- 은전한닢

https://bitbucket.org/eunjeon/mecab-ko-dic


http://blog.nacyot.com/articles/2015-06-13-eunjeon-with-elasticsearch/


http://www.kwangsiklee.com/ko/2017/02/%EC%97%98%EB%9D%BC%EC%8A%A4%ED%8B%B1%EC%84%9C%EC%B9%98-5-2-0%EC%97%90-%EC%9D%80%EC%A0%84%ED%95%9C%EB%8B%A2-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/


- zip 

https://askubuntu.com/questions/27349/how-do-i-compress-a-directory


- 한글 형태소 분석기 

http://guruble.com/elasticsearch-%ED%95%9C%EA%B8%80-%ED%98%95%ED%83%9C%EC%86%8C-%EB%B6%84%EC%84%9D%EA%B8%B0analyzer-%EB%B9%84%EA%B5%90/

</div>-->
Programming/ElasticSearch 2017. 10. 11. 17:16
Elasticsearch 실행시 vm.max_map_count [65530] is too low 오류 수정 방법

참고링크) https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-cli-run-prod-mode ~/elasticsearch-5.6.1/bin$ [2017-10-11T06:39:53,758][DEBUG][o.e.a.ActionModule ] Using REST wrapper from plugin org.elasticsearch.xpack.XPackPlugin[2017-10-11T06:39:55,926][INFO ][o.e.x.m.j.p.l.CppLogMessageHandler] [controller/16678] [Main.cc@128] controller (64 bit): Version 5.6.1 (Build ..

참고링크) https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-cli-run-prod-mode


~/elasticsearch-5.6.1/bin$ [2017-10-11T06:39:53,758][DEBUG][o.e.a.ActionModule ] Using REST wrapper from plugin org.elasticsearch.xpack.XPackPlugin[2017-10-11T06:39:55,926][INFO ][o.e.x.m.j.p.l.CppLogMessageHandler] [controller/16678] [Main.cc@128] controller (64 bit): Version 5.6.1 (Build e81fa9e3f3e0c1) Copyright (c) 2017 Elasticsearch BV[2017-10-11T06:39:55,972][INFO ][o.e.d.DiscoveryModule ] [node1] using discovery type [zen][2017-10-11T06:39:57,291][INFO ][o.e.n.Node ] [node1] initialized[2017-10-11T06:39:57,292][INFO ][o.e.n.Node ] [node1] starting ...[2017-10-11T06:39:57,666][INFO ][o.e.t.TransportService ] [node1] publish_address {10.146.0.5:9300}, bound_addresses {[::]:9300}[2017-10-11T06:39:57,679][INFO ][o.e.b.BootstrapChecks ] [node1] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checksERROR: [1] bootstrap checks failed[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144][2017-10-11T06:39:57,692][INFO ][o.e.n.Node ] [node1] stopping ...[2017-10-11T06:39:57,731][INFO ][o.e.n.Node ] [node1] stopped[2017-10-11T06:39:57,732][INFO ][o.e.n.Node ] [node1] closing ...[2017-10-11T06:39:57,750][INFO ][o.e.n.Node ] [node1] closed[2017-10-11T06:39:57,753][INFO ][o.e.x.m.j.p.NativeController] Native controller process has stopped - no new native processes can be started[1]+ Exit 78 ./elasticsearch


sudo sysctl -w vm.max_map_count=262144



</div>-->
Programming/ElasticSearch 2017. 10. 11. 17:08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함