'Elastic'에 해당되는 글 498건

  1. 2014.11.19 [Elasticsearch] ElasticsearchIntegrationTest 삽질 공유.
  2. 2014.11.18 [Elasticsearch] minimum_master 설정 참고.
  3. 2014.11.13 [Kibana] es 공식 가이드 문서 링크.
  4. 2014.11.13 [Elasticsearch] JDBC River 추가 REST API 팁!!
  5. 2014.11.13 [Elasticsearch] scale up limitation. 2
  6. 2014.11.12 JDBC River의 strategy 란?
  7. 2014.11.11 [Analyzer] 형태소 분석기.
  8. 2014.11.05 [Lucene] 4.9.0 analyzer & tokenizer....
  9. 2014.10.30 [ElasticSearch] _score 계산 시 IDF 연산은 어떻게 이루어 지나요?
  10. 2014.10.17 [ElasticSearch] bitset...

[Elasticsearch] ElasticsearchIntegrationTest 삽질 공유.

Elastic/Elasticsearch 2014. 11. 19. 13:56

이게 참 그냥 되야 하는 건데 eclipse 설정 환경에 따라 안될 수도 있으니 저 처럼 삽질 하시는 분들이 없도록 공유해 보겠습니다.

여기서 가장 중요한건 에러 메시지에 대한 인지를 얼마나 잘해서 문제를 해결 할수 있도록 접근하느냐 인것 같습니다.


[Elasticsearch 1.4.0]

Step 1) test class 중 아무거나 하나 실행


아래 에러 메시지 출력

Assertions mismatch: -ea was not specified but -Dtests.asserts=true

[2014-11-19 13:05:15,135][ERROR][org.elasticsearch.test   ] FAILURE  : org.elasticsearch.action.OriginalIndicesTests

REPRODUCE WITH  : mvn clean test -Dtests.seed=F00EC17F5FF1D602 -Dtests.class=org.elasticsearch.action.OriginalIndicesTests -Dtests.prefix=tests -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Seoul -Dtests.processors=8

Throwable:

java.lang.Exception: Assertions mismatch: -ea was not specified but -Dtests.asserts=true

    __randomizedtesting.SeedInfo.seed([F00EC17F5FF1D602]:0)

    org.apache.lucene.util.TestRuleAssertionsRequired$1.evaluate(TestRuleAssertionsRequired.java:48)

    org.apache.lucene.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:48)

    org.apache.lucene.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:65)

    org.apache.lucene.util.TestRuleIgnoreTestSuites$1.evaluate(TestRuleIgnoreTestSuites.java:55)

    [...com.carrotsearch.randomizedtesting.*]

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


여기서 핵심은 assertion mismatch 부분 입니다.

딱 봐도 거긴데요.

구글링을 어떻게 하느냐에 따라서 삽질이 될 수도 안될 수도 있습니다. ㅡㅡ;

(참고로 저는 ElasticsearchIntegrationTest error or issue or problem + assertions mismatch + randomizedtesing .,..)


Step 2) REPRODUCE WITH 를 가지고 console 에서 실행.

매우 잘 동작 합니다. ㅡ.ㅡ;;

그래서 멘붕..


Step 3) junit run configure 에 VM 옵션 추가 테스트

아래와 같이 추가 해 봄 

-Dtests.asserts=true

젠장 역시 안됨.


Step 4) 루씬 소스코드도 까보고 이것 저것 삽질 끝에 구글링을 재시도

아래는 재시도 질의

eclipse junit assert enable


Step 5) 두 가지 방법으로 test 성공

1. eclipse preference -> junit -> Add -ea checkbox enable.

2. 해당 test class -> run as -> run configure -> argementgs tab -> vm agrguments 에 -ea 옵션 추가.


이제 저 처럼 삽질 하지 마시고 편하게 es test 하세요.



:

[Elasticsearch] minimum_master 설정 참고.

Elastic/Elasticsearch 2014. 11. 18. 16:29

minimum_master 노드 설정은 예전에 최소 2 이상이라고 했었습니다.

하지만 이건 단순 예시이고 실제 node 구성에 맞춰서 설정 하는게 맞습니다.

기본 설정 가이드는 master node 로 지정된 크기의 quorum size 로 하시는게 좋습니다.


예시)

전체 노드 수 => 5대

node.master: true  => 2대

quorum size = 2/2 + 1 => 2대

즉, minimum_master: 2 가 되는 것입니다.


이와 같이 구성하게 되면 master node 가 하나 fail 났을때 장애로 이어지게 됩니다.

이유는 minimum_master 가 2가 안되기 때문입니다.


이 경우 node.master를 3개로 늘려 주시면 됩니다.

또는 minimum_master를 1개로 줄여 주셔되 되지만, 이 경우 failover 에 대한 대안이 없기 때문에 추천 하지 않습니다.


node.master 수와 minimum_master 간의 조합을 잘 하셔서 failover 구성을 하시기 바랍니다.

:

[Kibana] es 공식 가이드 문서 링크.

Elastic/Elasticsearch 2014. 11. 13. 15:37

http://www.elasticsearch.org/overview/kibana/installation/

http://www.elasticsearch.org/guide/en/kibana/current/index.html


※ chrome 에서 사용시 주의 사항.

- 기존에 이전 버전을 사용중이였다면 cache 및 temporary file 을 모두 삭제 하고 할 것.

- web server 로 tomcat과 같은 web application server를 사용할 경우 cache 된 파일 삭제 하고 할 것.

:

[Elasticsearch] JDBC River 추가 REST API 팁!!

Elastic/Elasticsearch 2014. 11. 13. 12:57

오픈소스의 좋은 점이기도 하지만 조금 불편한 점도 있죠.

사용방법이나 어디 레퍼런스가 없어서 소스코드를 확인해야만 하는 노가다!!


ㅎㅎ 뭐 그래도 재밌으면 그걸로 만족 ^^


JDBC River 테스트 중에 2014년 10월에 추가된 API 가 있어서 테스트 하던 중 아래 에러가 나와서 소스코드 확인 후 어떻게 사용해야 하는지 알게 되었내요.


[에러코드]

{"error":"NullPointerException[null]","status":500}


[추가된 REST API]

_state

_suspend

_abort

_resume

_run


[테스트 버전]

elasticsearch 1.3.4

elasticsearch jdbc river 1.3.4.4


[Request 방법]

$ curl -d "{\"rivername\":\"my_jdbc_river\"} -XPOST http://localhost:9200/_river/jdbc/{REST_API}

- 일단 _state 는 GET 입니다. POST 로 던지고 안된다고 하지 마세요.

- 문서에도 없는 내용입니다. rivername 이라는 parameter 를 구성해서 넘겨줘야 합니다.

- JSON 형태로 넘기셔야 됩니다.


기타 자세한 설명은 아래 링크 참고하세요.

Ref. https://github.com/jprante/elasticsearch-river-jdbc


:

[Elasticsearch] scale up limitation.

Elastic/Elasticsearch 2014. 11. 13. 11:28

elasticsearch에 대한 scale up 고려 시 참고 하세요.

장비 스펙이 너무 좋아도 리소스를 제대로 사용하지 못하면 의미가 없겠죠.


- Less than equal 32GB ram

- Less than equal 32 cores

:

JDBC River의 strategy 란?

Elastic/Elasticsearch 2014. 11. 12. 11:41

https://github.com/jprante/elasticsearch-river-jdbc


현재까지 제공되는 strategy 옵션은 두개 입니다.


1) simple

2) column


simple은 단순 fetch 와 indexing or delete 작업을 수행 하는 것 이라고,

column은 마지막에 수행한 정보를 기록해 두었다가 값을 비교하여 indexing or delete 작업을 수행 하는 것 입니다.


:

[Analyzer] 형태소 분석기.

Elastic/Elasticsearch 2014. 11. 11. 16:43

[형태소 분석기]

1) 루씬 기본 standard/cjk (source code 제공)

https://lucene.apache.org/core/4_10_0/analyzers-common/org/apache/lucene/analysis/standard/StandardAnalyzer.html


2) 루씬 arirang (source code 제공)

https://lucenekorean.svn.sourceforge.net/svnroot/lucenekorean/


3)  mecab (jar 제공)

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


4) twitter korean text (source code 제공)

https://github.com/twitter/twitter-korean-text


5) komoran (jar 제공)

http://shineware.tistory.com/entry/KOMORAN-ver-23

:

[Lucene] 4.9.0 analyzer & tokenizer....

Elastic/Elasticsearch 2014. 11. 5. 13:05

http://lucene.apache.org/core/4_9_0/core/org/apache/lucene/analysis/package-summary.html

https://lucene.apache.org/core/4_9_0/core/org/apache/lucene/analysis/TokenStream.html

Version matchVersion = Version.LUCENE_XY; // Substitute desired Lucene version for XY Analyzer analyzer = new StandardAnalyzer(matchVersion); // or any other analyzer TokenStream ts = analyzer.tokenStream("myfield", new StringReader("some text goes here")); OffsetAttribute offsetAtt = ts.addAttribute(OffsetAttribute.class); try { ts.reset(); // Resets this stream to the beginning. (Required) while (ts.incrementToken()) { // Use AttributeSource.reflectAsString(boolean) // for token stream debugging. System.out.println("token: " + ts.reflectAsString(true)); System.out.println("token start offset: " + offsetAtt.startOffset()); System.out.println(" token end offset: " + offsetAtt.endOffset()); } ts.end(); // Perform end-of-stream operations, e.g. set the final offset. } finally { ts.close(); // Release resources associated with this stream. }


The workflow of the new TokenStream API is as follows:

  1. Instantiation of TokenStream/TokenFilters which add/get attributes to/from the AttributeSource.
  2. The consumer calls reset().
  3. The consumer retrieves attributes from the stream and stores local references to all attributes it wants to access.
  4. The consumer calls incrementToken() until it returns false consuming the attributes after each call.
  5. The consumer calls end() so that any end-of-stream operations can be performed.
  6. The consumer calls close() to release any resource when finished using the TokenStream.



이전 버전이랑 바뀐 내용이 있으니 확인하셔야 합니다. :)

:

[ElasticSearch] _score 계산 시 IDF 연산은 어떻게 이루어 지나요?

Elastic/Elasticsearch 2014. 10. 30. 11:53

어제 저희 회사 행사에서 "오픈소스 검색엔진 구축 사례"로 발표를 했었는데요.

저에게 질문 주셨던 것중에 나름 재밌는 질문을 주셨던 내용이 있어서 공유 드립니다.


(아마도 질문 주신 분은 elasticsearch 를 사용해 보지 않으셨거나 경험 하신지 얼마 안되신 것 같다는 느낌 이였구요. lucene 은 많이 사용해보신 분 같다는 느낌 이였습니다. ㅎㅎ 제 느낌이니 틀릴수도 있구요.)


질문은 이랬던것 같습니다. 

- elasticsearch 에서  색인 시에, IDF 값을 Global 하게 쓰기 어려울 텐데 어떻게 사용되는 지에 대한 질문이었습니다


정답은 아래 링크에 나와 있죠. ^^

(shard 별로 이루어 집니다.)

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/relevance-intro.html


우선 TF의 경우 뭐 그냥 term frequency 니까 이건 별 문제 없을 거구요.

(기본 per field similarity 입니다.)

IDF의 경우는 그럼 어떻게 할까요 인데요????

IDF는 쉽게말해 index 내 전체 문서에서의 term이 포함된 document frequency 가 되는 건데요.

루씬에서는 뭐 당연히 문제가 안되겠지만 es 에서는 shard 라는 개념이 있죠. 즉 하나의 index를 여러개의 shard 로 나눠서 서로 다른 노드에 가지고 있으니 IDF 를 어떻게 계산 할 수 있을지.... 


제가 보는 관점은 단순 합니다.

- shard 별 document 의 idf 값만 보면 document 의 relevance가 문제일수 있지만, document 의 score 의 경우 tf + idf + field length norm 등 다양한 요소와 함께 계산되기 떄문에 normalized 되었다고 봅니다. 즉 score 값을 신뢰 할 수 있다 입니다.


ㅎㅎ 간만에 검색 질문을 주셔서 재밌었습니다.

:

[ElasticSearch] bitset...

Elastic/Elasticsearch 2014. 10. 17. 18:25

내 블로그에 안남기고 페북에만 남겼내..ㅋㅋ


그냥 지나가다가...

질의 성능 최적화에서 queries vs filters 에 대해 이해하고 사용하고 계실줄로 압니다만, ^^;

요기에 추가로 bitset 에 대해서도 내용이 나오기 때문에 그냥 참고하시라고 링크 던져 봅니다. ^^

filter 가 빠르다라고 이야기 하는 부분에서 bitset에 대한 이해가 없으면 안될것 같아서요.

https://lucene.apache.org/core/4_10_1/core/org/apache/lucene/util/OpenBitSet.html

쉽게는 term filter 했을 떄 match 된 term 에 대해서 bitset 을 1로 marking 해 두어 다음에 이 bitset 만 보고 문서를 리턴하게 된다 뭐 그런 이야기 입니다.


: