'Elastic/Elasticsearch'에 해당되는 글 385건

  1. 2016.04.07 [Elasticsearch] AWS에 Elasticsearch Cluster 구성 시 설정 주의
  2. 2016.04.06 [Elasticsearch] CONF_FILE was removed
  3. 2016.03.23 [Elasticsearch] Timeout 소개.
  4. 2016.03.18 [Elasticsearch] this-week-in-elasticsearch-and-apache-lucene-2016-03-14 요약
  5. 2016.03.17 [Elasticsearch] Synonym 적용을 위한 Index Settings 설정 예시
  6. 2016.03.17 [Elasticsearch] Elasticsearch에 Arirang 외부 사전 등록하기
  7. 2016.03.16 [Elasticsearch] Arirang analyzer 버전 올렸습니다.
  8. 2016.03.16 [Elasticsearch] _field_names, token_count
  9. 2016.03.11 [Elasticsearch] ElasticON'16 - Stories from Support
  10. 2016.03.02 [Elasticsearch] Create Index Settings & Mappings 템플릿.

[Elasticsearch] AWS에 Elasticsearch Cluster 구성 시 설정 주의

Elastic/Elasticsearch 2016. 4. 7. 19:52

오늘 삽질한 내용이라 짧게 일단 기록 부터 합니다.


network.host: "172.7.xxx.xxx"


설정이 특정 노드 한대에서 누락되어 있어서 삽질 했습니다.

이게 빠지게 되면 그냥 127.0.0.1 로 올라오기 때문에 정상적으로 binding 이 되지 않아 request 보내도 fail이 납니다.


:

[Elasticsearch] CONF_FILE was removed

Elastic/Elasticsearch 2016. 4. 6. 19:15

아마도 elasticsearch 2.x 버전대 부터 지원 안하는 것 같습니다.

이걸 왜 된다고 생각하고 있었을까요??


혹시라도 사용하시는 분들은 CONF_PATH 로 변경해서 사용하시기 바랍니다.


# CONF_FILE setting was removed
if [ ! -z "$CONF_FILE" ]; then
echo "CONF_FILE setting is no longer supported. elasticsearch.yml must be placed in the config directory and cannot be renamed."
exit 1
fi


:

[Elasticsearch] Timeout 소개.

Elastic/Elasticsearch 2016. 3. 23. 11:39

Timeout 소개라기 보다 하도 예전에 봤던거라 다시 한번 살펴 봤습니다.

2013년도에 0.90 버전때 봤던 코드라 2.2.0 기반으로 정리해 봅니다.


참고링크) 


원문 Snippet)

By default, the coordinating node waits to receive a response from all shards. If one node is having trouble, it could slow down the response to all search requests.



참고 클래스)

TransportService.java

SearchService.java

SearchRequestBuilder.java


예전과 크게 달라 지지는 않았습니다.


첫번째 Timeout은 Shard 별 Search operation 에 대한 timeout 입니다. 

아시는 바와 같이 search request 를 보내게 되면 각 shard 수 만큼 thread 가 action 수행을 하게 됩니다. 이때 개별 thread 에 대한 timeout 설정이라고 보시면 됩니다.


두번째 Timeout은 search coordinator node에서의 timeout 입니다. 즉, 모든 shard 에서 데이터를 받을 때 까지의 timeout 이라고 보시면 됩니다.


:

[Elasticsearch] this-week-in-elasticsearch-and-apache-lucene-2016-03-14 요약

Elastic/Elasticsearch 2016. 3. 18. 10:28

거의 매주 올려 주는 elasticsearch & lucene 소식 입니다.

그냥 학습 한다 생각하고 요점 정리만 해볼 생각 입니다.


원문링크)


원문요약) 

올라온 것 중 개인적으로 keep 할 것만 추렸습니다.


Changes in master:

  • `string` fields will be replaced by `text` and `keyword` fields in 5.0, with the following bwc layer:
    • String mappings in old indices will not be upgraded.
    • Text/Keyword mappings can be added to old and new indices.
    • String mappings on new indices will be upgraded automatically to text/keyword mappings, if possible, with deprecation logging.
    • If it is not possible to automatically upgrade, an exception will be thrown.
  • Norms can no longer be lazy loaded. This is no longer needed as they are no longer loaded into memory. The `norms` setting now take a boolean. Index time boosts are no longer stored as norms.
  • Queries deprecated in 2.0 have now been removed.
  • The generic thread pool is now bound to 4x the number of processors.

Ongoing changes:


master에 반영된 내용 중 눈에 확 들어 오는건 string field내요. 이제 text와 keyword로 맵핑을 해야 할 것 같습니다.

이미 반영된건 자동으로 업그레이드 되지 않지만 신규로 생성하는건 자동으로 되내요.

그리고 deprecated 된 query들 이제 remove 되었내요. 혹시라도 계속 사용하셨다면 에러 조심 하세요.


변경중인것 중에는 field명에 dot 지원이랑 percolator query가 눈에 들어 오내요. API 방식에서 Query 방식으로 변경되면 더 편하고 유용하게 사용할 수 있겠습니다.




:

[Elasticsearch] Synonym 적용을 위한 Index Settings 설정 예시

Elastic/Elasticsearch 2016. 3. 17. 18:34

나중에 또 잊어 버릴까봐 기록합니다.


참고문서)


예시)

"index": {
"analysis": {
"analyzer": {
"arirang_custom": {
"type": "custom",
"tokenizer": "arirang_tokenizer",
"filter": ["lowercase", "trim", "arirang_filter"]
},
"arirang_custom_searcher": {
"tokenizer": "arirang_tokenizer",
"filter": ["lowercase", "trim", "arirang_filter", "meme_synonym"]
}
},
"filter": {
"meme_synonym": {
"type": "synonym",
"synonyms": [
"henry,헨리,앙리"
]
}
}
}
}


여기서 주의할 점 몇 가지만 기록 합니다.

1. synonym analyzer 생성 시 type을 custom 으로 선언 하거나 type을 아예 선언 하지 않습니다.

2. synonym 은 filter 로 생성 해서 analyzer 에 filter 로 할당 합니다.

3. 색인 시 사용할 것인지 질의 시 사용할 것인지 장단점과 서비스 특성에 맞게 검토 합니다.

4. synonyms_path 를 이용하도록 합니다. (이건 주의라기 보다 관리적 차원)

5. match type 의 query만 사용이 가능 하며, term type 의 query를 사용하고 싶으시다면 색인 시 synonym 적용해야 합니다.


그럼 1번에서 선언 하지 않는 다는 이야기는 뭘까요?

선언 하지 않으시면 그냥 custom 으로 만들어 줍니다.

못 믿으시는 분들을 위해 아래 소스코드 투척 합니다.


[AnalysisModule.java]

String typeName = analyzerSettings.get("type");
Class<? extends AnalyzerProvider> type;
if (typeName == null) {
if (analyzerSettings.get("tokenizer") != null) {
// custom analyzer, need to add it
type = CustomAnalyzerProvider.class;
} else {
throw new IllegalArgumentException("Analyzer [" + analyzerName + "] must have a type associated with it");
}
} else if (typeName.equals("custom")) {
type = CustomAnalyzerProvider.class;
} else {
type = analyzersBindings.analyzers.get(typeName);
if (type == null) {
throw new IllegalArgumentException("Unknown Analyzer type [" + typeName + "] for [" + analyzerName + "]");
}
}


:

[Elasticsearch] Elasticsearch에 Arirang 외부 사전 등록하기

Elastic/Elasticsearch 2016. 3. 17. 12:49

arirang 한글 형태소 분석기를 적용하고 사전 데이터를 업데이트 할 일들이 많이 생깁니다.

jar 안에 들어 있는 사전 데이터는 패키지 빌드 후 재배포하고 클러스터 재시작까지 해줘야 하는데요.

이런 과정 없이 사전 데이터만 외부에서 파일로 업데이트 및 관리하고 재시작 없이 바로 적용했으면 합니다.


기본적으로 이전 글에서 사전 데이터를 reload 하는 REST API를 구현해 두었습니다.

이 기능으로 일단 기능 구현은 완료가 된 것입니다.


이전 글 보기)


그럼 elasticsearch에서 어디에 사전 파일을 두고 관리를 해야 적용이 가능 할까요?

이전 글을 보시면 기본적으로 수명님이 만드신 arirang.morph 에서 classpath 내  org/apache/lucene/analysis/ko/dic 과 같이 생성 및 배치 시키시면 먼저 이 파일을 읽어 들이게 되어 있습니다.


이전 글 보기)


단, elasticsearch 실행 시 classpath 정보에 생성한 경로를 추가하지 않으시면 사전 파일들을 찾을 수 없으니 이점 유의 하시기 바랍니다.


elasticsearch classpath 설정)

elasticsearch에서 가이드 하는 것은 수정하지 마라 입니다. 하지만 수정 없이는 이를 활용할 수 없으니 이런건 수정해줘야 합니다.


$ vi bin/elasticsearch.in.sh

.....

ES_CLASSPATH="$ES_HOME/lib/elasticsearch-2.2.0.jar:$ES_HOME/lib/*:$ES_HOME/설정하신경로입력"

.....


이렇게 수정하신 후 재시작 하시고 직접 사전 정보 업데이트 후 reload api 를 이용해서 적용되는지 확인해 보시면 되겠습니다.


참고 정보 - 간단 요약)

arirang.morph 에서 properties 파일과 dic 파일 loading flow


Step 1)

load external korean.properties into classpath.

dic files are same.


Step 2)

if not exist, load korean.properties into jar.

dic files are same.


사전 데이터는 어떻게 등록 할 수 있는지 궁금하신 분은 이전 글 참고하세요.


사전 데이터 등록 예제)

:

[Elasticsearch] Arirang analyzer 버전 올렸습니다.

Elastic/Elasticsearch 2016. 3. 16. 16:38

작업 하는 김에 버전 올렸습니다.


git branch)


루씬 한글 형태소 분석기인 arirang analyzer 버전 올렸습니다.
Elasticsearch 2.2.0
Lucene 5.4.1
arirang.morph 1.0.3

빌드 및 설치 방법)
$ mvn clean package
$ bin/plugin install file:/git/elasticsearch-analysis-arirang/target/elasticsearch-analysis-arirang.zip

인덱스 세팅 방법)
"index": {
"analysis": {
"analyzer": {
"arirang_custom": {
"type": "arirang_analyzer",
"tokenizer": "arirang_tokenizer",
"filter": ["lowercase", "trim", "arirang_filter"]
}
}
}

analyze 테스트 방법)
$ curl -XGET http://localhost:9200/memebox_deal_idx/_analyze?pretty -d '{ "analyzer":"arirang_analyzer", "text":"elasticsearch 한국 사용자 그룹입니다." }' { "tokens" : [ { "token" : "elasticsearch", "start_offset" : 0, "end_offset" : 13, "type" : "word", "position" : 0 }, { "token" : "한국", "start_offset" : 14, "end_offset" : 16, "type" : "korean", "position" : 1 }, { "token" : "사용자", "start_offset" : 17, "end_offset" : 20, "type" : "korean", "position" : 2 }, { "token" : "그룹", "start_offset" : 21, "end_offset" : 23, "type" : "korean", "position" : 3 } ] }


사전 reload 방법)

$ curl -XGET http://localhost:9200/_arirang_dictionary_reload

- 클러스터 재시작 없이 사전 데이터 수정 후 리로드 잘 됩니다. 단, 이미 색인 된 문서들은 재색인 해야 합니다.

:

[Elasticsearch] _field_names, token_count

Elastic/Elasticsearch 2016. 3. 16. 10:33

Elasticsearch 2.x 대로 들어 오면서 field 구성 중 눈에 보이는 것들이 있어서 살짝 기록하고 갑니다.


기존에 있던 exists, missing 필드의 경우 _field_names 라는 필드로 대체 된 것 같습니다.

아래 내용 참고하세요.


원문링크)


원문 Snippet)

The _field_names field indexes the names of every field in a document that contains any value other thannull. This field is used by the exists and missing queries to find documents that either have or don’t have any non-null value for a particular field.


그리고 추가된 것 중 token_count 라는 필드가 있는데 이건 analyzed field에 대해서 나름 활용이 되지 않을까 싶습니다.

해당 필드에 대해서 multi field를 이용해서 추출된 토큰 수를 기록 할 수 있습니다. 자세한 내용은 아래 참고하세요.


원문링크)


원문 Snippet)

A field of type token_count is really an integer field which accepts string values, analyzes them, then indexes the number of tokens in the string.


:

[Elasticsearch] ElasticON'16 - Stories from Support

Elastic/Elasticsearch 2016. 3. 11. 15:36

ElasticON '16에서 support engineer 가 발표한 자료로 보입니다.

여기서 Elasticsearch를 이용하면서 기억 하고 있어야 할 만한 내용들이 있어서 기록해 봅니다.

이미 아시는 분들도 있겠지만 아마도 잘 모르시는 분들이 더 많지 않을까 싶습니다.

개인적으로 예전 Deview 때 제가 발표했던 내용의 근거가 포함되어 있어 기분 좋내요. :)


발표제목)

Stories from Support: Top Problems and Solutions


문서첨부)


thursday-mark-w-chris-e-stories-from-support0problems-solutions-stage-c.pdf


내용 Snippet)

Doc Value Caveats

• Analyzed strings do not currently support doc_values,which means that you must avoid using such fields for sorting, aggregating, and scripting

• Analyzed strings are generally tokenized into multiple terms, which means that there is an array of values

• With few exceptions (e.g.,significant terms),aggregating against analyzed strings is not doing what you want

• Unless you want the individual tokens,scripting is largely not useful

• Big improvement coming in ES2.3 (“keyword” field)


Do You Know Where Your Shards Are At Night

• Elasticsearch 1.X defaults to 5 primary, 1 replica

• Elasticsearch 2.0 defaults to 2 primary, 1 replica

• Increase primaries for higher write throughput and to spread load

• 50GB is the rule of thumb max size for a primary shard. More for recovery than performance

• Replicas are not backups. Rarely see a benefit with more than 1


Queries

• Deeppagination

  • ES 2.0 has a soft limiton 10K hits per request. Linearly more expensive per shard

  • Use scan and/or scrollAPI

• Leading wildcards

  • Equivalent to a full table scan(bad)

• Scripting

  • Without parameters • Dynamically(inline)

  • Unnecessary filter caching (e.g.,exact date ranges down to the millisecond)


Aggregations

• Cardinality

  • Setting the threshold to 40K (or higher) is memory intensive and generally unnecessary

  • Using in place of search

  • Searching will be faster

  • Enormous sizes

• Requesting large shard sizes (relative to actual size)

  • Linearly more expensive per shard touched

  • Generally unnecessary

• Returning hits when you don’t want them


Indexing

• Too many shards

  • If your shards are small (define:small as<5GB) and they outnumber your nodes, then you have too many

• Refreshing too fast

  • This controls “near real time” search

• Merge throttling

  • Disable it on SSDs

  • Make single threaded on HDDs(see node sizing link)

• Not using bulk processing


:

[Elasticsearch] Create Index Settings & Mappings 템플릿.

Elastic/Elasticsearch 2016. 3. 2. 12:30

그냥 복습 하는 차원에서 기록 합니다.



$ curl -XPUT "http://localhost:9200/INDEX_NAME" -d'

{

  "settings": {

  ...설정할 정보를 넣으세요...

  },

  "mapping": {

  ...설정할 정보를 넣으세요...

  }

}


별 내용 없습니다.

그냥 rest api를 이용해서 index 생성 할 때 필요한 설정 정보를 작성하는 틀 정도 입니다.

type 정보는 mappings 안에 넣으시면 됩니다.

기본적으로 해당 설정은 지정한 INDEX_NAME 에 한해서 적용되는 것입니다. 별도의 global 설정을 하고 싶으시다면 template 기능을 활용하시기 바랍니다.


참고링크)

: