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

  1. 2013.01.03 elasticsearch routing 적용하기 1
  2. 2012.12.24 elasticsearch synonym 적용시 주의 사항.
  3. 2012.12.20 검색 관련 짧은 기법 설명.
  4. 2012.12.18 Elasticsearch Query URI 예제 모음.
  5. 2012.12.18 Elasticsearch 동의어/유의어 사전 활용
  6. 2012.12.17 elasticsearch uri 참고 링크
  7. 2012.12.10 lucene 색인 옵션
  8. 2012.11.22 Elasticsearch Cluster 구성하기 (shards, replicas)
  9. 2012.11.16 elasticsearch 설치 및 한글형태소분석기 적용 따라하기. 3
  10. 2012.11.14 solr + tomcat 연동 시 admin 에서 한글 검색 이슈

elasticsearch routing 적용하기

Elastic/Elasticsearch 2013. 1. 3. 14:47

Reference URL

Routing 이란?
  - 색인 시 특정 shard 로 색인을 하고, 검색 시 지정된 shard 로만 검색 할 수 있도록 지원
  - 색인 field 중 unique key 에 해당하는 값을 가지고 routing path 를 지정
  - 검색 시 지정한 path 를 query 에 주어 분산된 indices 를 모두 검색 하지 않고 지정된 indices 만 검색
  - routing field 는 store yes, index not_analyzed 로 설정 되어야 함
 
  - 기본 설정
        "routing" : {
            "required" : true,
            "path" : "test.user_uniq_id"
        }
Routing 설정하기
  - index 생성 시 routing 설정을 포함 시켜 생성 (replica 1, shards 50)
    "settings" : {
        "number_of_shards" : 50,
        "number_of_replicas" : 1,
        "index" : {
            "analysis" : {
                "analyzer" : {
                    "kr_analyzer" : {
                        "type" : "custom",
                        "tokenizer" : "kr_tokenizer",
                        "filter" : ["trim", "kr_filter", "kr_synonym"]
                    },
                    "kr_analyzer" : {
                        "type" : "custom",
                        "tokenizer" : "kr_tokenizer",
                        "filter" : ["trim", "kr_filter", "kr_synonym"]
                    }
                },
                "filter" : {
                    "kr_synonym" : {
                        "type" : "synonym",
                        "synonyms_path" : "analysis/synonym.txt"
                    }
                }
            }
        },
        "routing" : {
            "required" : true,
            "path" : "test.user_uniq_id"
        }
    },
    "mappings" : {
        "test" : {
            "properties" : {
                "docid" : { "type" : "string", "store" : "yes", "index" : "not_analyzed"},
                "title" : { "type" : "string", "store" : "yes", "index" : "analyzed", "term_vector" : "yes", "analyzer" : "kr_analyzer" },
                "user_uniq_id" : { "type" : "string", "store" : "yes", "index" : "not_analyzed" },
                "ymdt" : { "type" : "date", "format" : "yyyyMMddHHmmss", "store" : "yes", "index" : "not_analyzed" }
                }
            }
        }
    }
}'
 
  - document 색인 시 setRouting 설정을 해줘야 정상 동작 함
    IndexRequestBuilder requestBuilder = client.prepareIndex(indexName, indexType);
    requestBuilder.setId(docId);
    requestBuilder.setRouting(docMeta.getUserUniqId());
    requestBuilder.setSource(jsonBuilder);
routing search query uri
  - http://localhost:9200/index0/_search?source={"query":{"bool":{"must":[{"term":{"user_uniq_id":"honggildong@elastic.com"}}],"must_not":[],"should":[]}},"from":0,"size":50,"sort":[{"ymdt":"asc"}],"facets":{}}&routing=honggildong@elastic.com&pretty=true




:

elasticsearch synonym 적용시 주의 사항.

Elastic/Elasticsearch 2012. 12. 24. 11:07

synonym 관련 글은 아래 참고 하시구요.
제가 적용 하면서 실수했던 내용을 공유 합니다.

1. cluster 구성을 했을 경우 synonym.txt 파일을 모든 서버에 생성을 해야 합니다.
  : 당연한 이야기 인데 저는 클러스터 구성한걸 까맣게 잊고 서버 한대에만 적용해 놓고 왜 안되지 이러고 있었습니다. ㅡ.ㅡ;;

2. synonym.txt 파일 위치 지정
  : elasticsearch.org 에도 있는데 문서를 제대로 안읽어 보고 파일을 어디에 놓아야 하는거야 하고 삽질을 했습니다.
  : 기본 설치된 경로에서 config 폴더를 기준으로 상대경로로 인식 합니다. (analysis/synonym.txt)
  : 소스 코드를 보면 full path 로 넣으셔도 됩니다. (소스를 보는 것도 좋은 에러 해결 방법 입니다.)
  : Environment.java (org.elasticsearch.env 패키지 아래 있습니다.)


그리고 제가 적용한 방법은 solr 용으로 테스트 하였습니다.

:

검색 관련 짧은 기법 설명.

Elastic/Elasticsearch 2012. 12. 20. 10:16

그냥 facet search 보다 얻어 걸린 내용인데요.
스크랩용으로 ^^;

http://nandaro.tistory.com/
요기 가보시면 아래 내용 포함해서 더 좋은 글들이 많이 있습니다.


(가) 향상된 검색(Search) 방법

     - 전문검색(Full-Text Search)이 아닌 토픽(Topic)에 의한 의미검색(Semantic Search) 실행
        : 온톨로지를 이용한 추론(reasoning) 적용
     - 검색된 토픽의 분류(Classification)에 의한 그룹(Group)화된 검색 결과 표현
        : 온톨로지(Ontology)의 인스턴스(Instance)들로 표현된 검색결과 또는 인스턴스(Ontology Instance)의 자원(Occurrence)들로 표현된 결과
     - 토픽 검색을 위한 추천어(Suggest Topic) 제공
        : 검색을 위한 추천 키워드(주제어 자동완성 기능) 또는 검색 결과에서 연관성을 이용하여 네비게이션이 가능한 검색어 관련 추천어 제공
     - 패싯 분류(Facet Classification) 및 검색(Facet Search) 실행
        : 서로 다른 성질의 데이터중 서로 공통인 부분만으로 분류 또는 검색

   (나) 네비게이션(Navigation) 방법

     - 단방향 계층적(Strict Hierarchy) 네비게이션을 회피(쌍방향 네비게이션)
     - 유용한 의미를 지닌 관련 콘텐츠로 링크(Link)
     - 그룹의 성격을 지닌 콘텐츠는 관련된 그룹으로 연결
     - 제작 과정을 간략화 : 수천개의 수작업 링크는 배제
     - 향상된 링크(연결) 관리 : 연결되지 않은(Broken) 링크 체크 및 배제

   (다) 콘텐츠 통합(Information Integration)

     - 단일화된 뷰(View)에 표현되는 이형질의 콘텐츠를 통합하는 지식 허브(Hub)로서 토픽맵을 제작(분산된 지식도 통합 가능)
     - 사용자 사례 중심의 콘텐츠 표현
       : 온톨로지의 인스턴스와 관련되는 콘텐츠를 사용자 관점에서 표현(어플리케이션 통합도 가능)
     - 토픽맵 기반의 시맨틱웹 사이트에서 표현되는 통합된 정보의 제목 또는 콘텐츠를 사용자 관점에서 적절히 선택

:

Elasticsearch Query URI 예제 모음.

Elastic/Elasticsearch 2012. 12. 18. 22:39


- field search : http://localhost:9200/test/_search?q=msg:채팅&pretty=true

- multi field & sort & list search : http://localhost:9200/test/_search?q=msg:과장 AND rm_title:과장&sort=rm_ymdt:asc&from=0&size=10&pretty=true

- paging search & sort : http://localhost:9200/test/_search?source={"query":{"bool":{"must":[{"term":{"msg":"과장"}}],"must_not":[],"should":[]}},"from":0,"size":50,"sort":[{"rm_ymdt":"asc"}],"facets":{}}&pretty=true

- range search : http://localhost:9200/test/_search?source={"query":{"range":{"recv_ymdt":{"from":"20120820163946", "to":"20120911160444"}}}}&pretty=true

- http://localhost:9200/_plugin/head/ 이 페이지에서 structured query 를 통해 쿼리 생성이 가능 함.



:

Elasticsearch 동의어/유의어 사전 활용

Elastic/Elasticsearch 2012. 12. 18. 22:22

[title=Elasticsearch 동의어/유의어 설정]

- 색인 파일 생성 시 설정을 해줘야 함

- 기본 kr_analysis 가 적용되어 있어야 함

  - 없을 경우 한국어 처리가 안됨

- synonym.txt 파일을 적절한 위치에 생성

  - http://www.elasticsearch.org/guide/reference/index-modules/analysis/synonym-tokenfilter.html


[title=synonym.txt 샘플]

Solr synonyms


The following is a sample format of the file:


# blank lines and lines starting with pound are comments.


#Explicit mappings match any token sequence on the LHS of "=>"

#and replace with all alternatives on the RHS.  These types of mappings

#ignore the expand parameter in the schema.

#Examples:

i-pod, i pod => ipod,

sea biscuit, sea biscit => seabiscuit


#Equivalent synonyms may be separated with commas and give

#no explicit mapping.  In this case the mapping behavior will

#be taken from the expand parameter in the schema.  This allows

#the same synonym file to be used in different synonym handling strategies.

#Examples:

ipod, i-pod, i pod

foozball , foosball

universe , cosmos


# If expand==true, "ipod, i-pod, i pod" is equivalent to the explicit mapping:

ipod, i-pod, i pod => ipod, i-pod, i pod

# If expand==false, "ipod, i-pod, i pod" is equivalent to the explicit mapping:

ipod, i-pod, i pod => ipod


#multiple synonym mapping entries are merged.

foo => foo bar

foo => baz

#is equivalent to

foo => foo bar, baz


[색인파일 생성 샘플코드 - synonym 적용]

curl -XPUT 'http://localhost:9200/test' -d '{

    "settings" : {

        "number_of_shards" : 5,

        "number_of_replicas" : 1,

        "index" : {

            "analysis" : {

                "analyzer" : {

                    "kr_analyzer" : {

                        "type" : "custom",

                        "tokenizer" : "kr_tokenizer",

                        "filter" : ["trim", "kr_filter", "kr_synonym"]

                    },

                    "kr_analyzer" : {

                        "type" : "custom",

                        "tokenizer" : "kr_tokenizer",

                        "filter" : ["trim", "kr_filter", "kr_synonym"]

                    }

                },

                "filter" : {

                    "kr_synonym" : {

                        "type" : "synonym",

                        "synonyms_path" : "analysis/synonym.txt"

                    }

                }

            }

        }

    }'


[title=색인파일 생성 샘플코드]

curl -XPUT 'http://10.101.254.223:9200/test' -d '{

    "settings" : {

        "number_of_shards" : 5,

        "number_of_replicas" : 1

    },

    "index" : {

        "analysis" : {

            "analyzer" : {

                "synonym" : {

                    "tokenizer" : "kr_analyzer",

                    "filter" : ["synonym"]

                }

            },

            "filter" : {

                "synonym" : {

                    "type" : "synonym",

                    "synonyms_path" : "/home/계정/apps/elasticsearch/plugins/analysis-korean/analysis/synonym.txt"

                }

            }

        }

    },

    "mappings" : {

        "docs" : {

            "properties" : {

 ...................................(요기 부분은 다른 문서들 참고 하시면 됩니다.)

                    }

                }

            }

        }

    }

}'

:

elasticsearch uri 참고 링크

Elastic/Elasticsearch 2012. 12. 17. 10:00

색인 파일 저장위치 변경
http://www.elasticsearch.org/guide/reference/setup/configuration.html

검색 uri 형식 restful 형식
http://stackoverflow.com/questions/12195017/different-result-when-using-get-post-in-elastic-search

http://localhost:9200/_search&{"query":{"term":{"text":"john"}}}
http://localhost:9200/_search?source={"query":{"term":{"text":"john"}}}

date range search 형식
http://stackoverflow.com/questions/11351296/elastic-search-date-range-query
{
    "query" : {
        "range" : {
            "PublishTime" : {
                "from" : "20111201T000000",
                "to" : "20111203T235959"
            }
        }
    }
}

:

lucene 색인 옵션

Elastic/Elasticsearch 2012. 12. 10. 10:50

짧게 정리...

※ Store 옵션
데이터를 저장 할지에 대한 정의.
결국, 검색 후 화면에 출력을 할 것인지 말 것인지에 따라 정의.

Store.YES : 저장 함
Store.NO : 저장 안함 
Store.COMPRESS : 압축 저장 함 (글 내용이 크거나, binary 파일)


※ Index 옵션
검색을 위한 색인을 할지에 대한 정의.
아래는 2.x 대 내용이니 패스, 4.0 을 보면 전부 deprecated 된 걸로 나오내요.
그래도 의미는 파악 하고 있음 좋겠죠.

Index.NO : 색인을 하지 않음 (검색 field 로 사용하지 않음)
Index.TOKENIZED : 검색 가능 하도록 색인 함, analyzer 에 의한 tokenized 수행을 통해 색인을 함.
Index.UN_TOKENIZED : 검색 가능 하도록 색인 함, 단 analyzer 에 의한 분석을 하지 않기 때문에 색인 속도가 빠름. (숫자나 분석이 필요 없는 경우)
Index.NO_NORMS : 검색 가능 하도록 색임 함, 단 색인 속도가 매우 빨라야 할 경우 사용하며, analyzer 에 의한 분석을 수행 하지 않고, field length normalize 를 수행 하지 않음.


http://lucene.apache.org/core/4_0_0/core/index.html

Enum Constant and Description
ANALYZED
Deprecated. 
Index the tokens produced by running the field's value through an Analyzer.
ANALYZED_NO_NORMS
Deprecated. 
Expert: Index the tokens produced by running the field's value through an Analyzer, and also separately disable the storing of norms.
NO
Deprecated. 
Do not index the field value.
NOT_ANALYZED
Deprecated. 
Index the field's value without using an Analyzer, so it can be searched.
NOT_ANALYZED_NO_NORMS
Deprecated. 
Expert: Index the field's value without an Analyzer, and also disable the indexing of norms.

:

Elasticsearch Cluster 구성하기 (shards, replicas)

Elastic/Elasticsearch 2012. 11. 22. 17:34

많이 부족하지만 일단 스스로 정리하기 위해서.. 올립니다. ^^;

[Reference]

    http://www.elasticsearch.org

    http://www.elasticsearchtutorial.com/elasticsearch-in-5-minutes.html


[URI Command]

    http://10.101.254.223:9200/_status

    http://10.101.254.223:9200/_cluster/state?pretty=true

    http://10.101.254.223:9200/_cluster/nodes?pretty=true

    http://10.101.254.223:9200/_cluster/health?pretty=true


[색인파일 setting 확인]

    http://10.101.254.223:9200/depth1_1/_settings?pretty=true


[색인파일 mapping 확인]

    http://10.101.254.223:9200/depth1_1/_mapping?pretty=true


[색인파일의 URI Step 정의]

    /depth1/

        index 명 (각 서비스 단위의 색인명 or vertical service 명)

        예)

            /blog

            /cafe

    /depth1/depth2/

        index type 명

        예)

            /blog/user

            /blog/post

            /cafe/user

            /cafe/post

    /depth1/depth2/depth3

        색인된 document unique key (id)


[색인파일의 생성, shard, replica 설정]

    http://www.elasticsearch.org/guide/reference/api/admin-indices-create-index.html


    - case 1

        curl -XPUT 'http://10.101.254.221:9200/depth1/'


    - case 2

        curl -XPUT 'http://10.101.254.221:9200/depth1_2/' -d '

        index :

            number_of_shards : 3

            number_of_replicas : 2

        '


    - case 3 : recommended

        curl -XPUT 'http://10.101.254.223:9200/depth1_1/' -d '{

            "settings" : {

                "index" : {

                    "number_of_shards" : 3,

                    "number_of_replicas" : 2

                }

            }

        }'


    - case 4

        curl -XPUT 'http://10.101.254.223:9200/depth1_1/' -d '{

            "settings" : {

                "number_of_shards" : 3,

                "number_of_replicas" : 2

            }

        }'


[색인파일 mapping 설정]

    http://www.elasticsearch.org/guide/reference/mapping/

    http://www.elasticsearch.org/guide/reference/mapping/core-types.html

    ※ 이 영역에서 색인 또는 검색 시 사용할 analyzer 나 tokenizer 를 지정 한다.

    ※ solr 의 경우 schema.xml 에서 정의 하는 설정을 여기서 수행 함.


    curl -XPUT 'http://10.101.254.223:9200/depth1_1/depth2_1/_mapping' -d '

    {

        "depth2_1" : {

            "properties" : {

                "FIELD명" : {"type" : "string", "store" : "yes"}

            }

        }

    }'


[데이터 색인]

    http://www.elasticsearch.org/guide/reference/api/index_.html


    curl -XPUT 'http://10.101.254.223:9200/blog/user/dilbert' -d '{ "name" : "Dilbert Brown" }'


    curl -XPUT 'http://10.101.254.223:9200/blog/post/1' -d '

    {

        "user": "dilbert",

        "postDate": "2011-12-15",

        "body": "Search is hard. Search should be easy." ,

        "title": "On search"

    }'


    curl -XPUT 'http://10.101.254.223:9200/blog/post/2' -d '

    {

        "user": "dilbert",

        "postDate": "2011-12-12",

        "body": "Distribution is hard. Distribution should be easy." ,

        "title": "On distributed search"

    }'


    curl -XPUT 'http://10.101.254.223:9200/blog/post/3' -d '

    {

        "user": "dilbert",

        "postDate": "2011-12-10",

        "body": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat" ,

        "title": "Lorem ipsum"

    }'


    curl -XPUT 'http://10.101.254.223:9200/blog/post/4' -d '

    {

        "user": "dilbert",

        "postDate": "2011-12-11",

        "body": "한글 형태소 분석기 테스트와 shard 그리고 replica 테스트" ,

        "title": "elastic search 분산설정"

    }'


    curl -XGET 'http://10.101.254.223:9200/blog/user/dilbert?pretty=true'

    curl -XGET 'http://10.101.254.221:9200/blog/post/1?pretty=true'

    curl -XGET 'http://10.101.254.223:9200/blog/post/2?pretty=true'

    curl -XGET 'http://10.101.254.221:9200/blog/post/3?pretty=true'


[검색테스트]

    http://www.elasticsearch.org/guide/reference/api/search/uri-request.html

    - user에 dilbert 가 포함되어 있는 것

    curl 'http://10.101.254.221:9200/blog/post/_search?q=user:dilbert&pretty=true'

    http://10.101.254.223:9200/blog/post/_search?q=user:dilbert&pretty=true


    - title 에 search 가 포함 안된 것

    curl 'http://10.101.254.223:9200/blog/post/_search?q=-title:search&pretty=true'

    http://10.101.254.223:9200/blog/post/_search?q=-title:search&pretty=true


    - title 에 search 는 있고 distributed 는 없는 것

    curl 'http://10.101.254.223:9200/blog/post/_search?q=+title:search%20-title:distributed&pretty=true&fields=title'

    http://10.101.254.223:9200/blog/post/_search?q=+title:search%20-title:distributed&pretty=true&fields=title


    - range 검색

    curl -XGET 'http://10.101.254.223:9200/blog/_search?pretty=true' -d '

    {

        "query" : {

            "range" : {

                "postDate" : { "from" : "2011-12-10", "to" : "2011-12-12" }

            }

        }

    }'


    - blog 라는 색인 파일 전체 검색

        http://10.101.254.223:9200/blog/_search?q=user:dilbert&pretty=true

        http://10.101.254.223:9200/blog/_search?q=name:dilbert&pretty=true


    - routing 검색 (정확한 의미 파악이 어려움)

        http://10.101.254.223:9200/blog/_search?routing=dilbert?prettry=true


[Clustering 설정 정보]

    ※ 서버1

        cluster.name: cluster_es1

        node.name: node_es1

        node.master: true

        node.data: true

        node.rack: rack_es1

        index.number_of_shards: 3

        index.number_of_replicas: 2

        network.host: 10.101.254.223

        transport.tcp.port: 9300

        http.port: 9200

        gateway.type: local

        gateway.recover_after_nodes: 1

        gateway.recover_after_time: 5m

        gateway.expected_nodes: 2

        cluster.routing.allocation.node_initial_primaries_recoveries: 4

        cluster.routing.allocation.node_concurrent_recoveries: 2

        indices.recovery.max_size_per_sec: 0

        indices.recovery.concurrent_streams: 5

        discovery.zen.minimum_master_nodes: 1

        discovery.zen.ping.timeout: 3s

        discovery.zen.ping.unicast.hosts: ["10.101.254.223:9300", "10.101.254.221:9300"]

        cluster.routing.allocation.allow_rebalance: "indices_all_active"

        indices.recovery.concurrent_streams: 3

        action.auto_create_index: true

        index.mapper.dynamic: true


    ※ 서버2

        cluster.name: cluster_es1

        node.name: node_es2

        node.master: true

        node.data: true

        node.rack: rack_es1

        index.number_of_shards: 3

        index.number_of_replicas: 2

        network.host: 10.101.254.221

        transport.tcp.port: 9300

        http.port: 9200

        gateway.type: local

        gateway.recover_after_nodes: 1

        gateway.recover_after_time: 5m

        gateway.expected_nodes: 2

        cluster.routing.allocation.node_initial_primaries_recoveries: 4

        cluster.routing.allocation.node_concurrent_recoveries: 2

        indices.recovery.max_size_per_sec: 0

        indices.recovery.concurrent_streams: 5

        discovery.zen.minimum_master_nodes: 1

        discovery.zen.ping.timeout: 3s

        discovery.zen.ping.unicast.hosts: ["10.101.254.223:9300", "10.101.254.221:9300"]

        cluster.routing.allocation.allow_rebalance: "indices_all_active"

        indices.recovery.concurrent_streams: 3

        action.auto_create_index: true

        index.mapper.dynamic: true


[설정파일의미]

    ※ 클러스터링할 그룹명 (묶고자 하는 서버들에 elasticsearch.yml 파일에서 이름을 동일하게 주면 클러스터링 됨)

        cluster.name: group1


    ※ 검색 및 색인 서버로 사용하고자 할 경우 설정

        node.master: true

        node.data : true


    ※ 검색 전용 서버로 사용하고자 할 경우 설정 (검색 로드발라서)

        node.master: false

        node.data : false


    ※ 색인 전용 서버로 사용하고자 할 경우 설정

        node.master: false

        node.data : true


    ※ 이건 용도를 잘 모르겠음

        node.master: true

        node.data : false


    ※ 색인 파일(데이터) 사이즈가 작을 경우 수치를 작게 (1), 사이즈가 클 경우 수치를 크게 (기본 5)

    ※ 하나의 색인 파일을 몇 개로 나눠서 저장할 것인지 정의

        index.number_of_shards: 5


    ※ 색인 파일에 대한 복사본 생성 수치 (기본 1)

        index.number_of_replicas: 1


    ※ 설정 후 서버간 클러스터링 되는 과정을 파악하기 어려움

        두 대의 서버에 cluster.name 을 같게 해서 실행 시켜면 자동으로 clustering 됨


    ※ 서버 한대에서 여러개의 elasticsearch instacne 실행 방법

        ./elasticsearch -p pidfile1 -Des.config=elasticsearch/config/elasticsearch1.yml

        ./elasticsearch -p pidfile2 -Des.config=elasticsearch/config/elasticsearch2.yml


        ※ 기타 옵션

        -Xmx1g -Xms1g -Des.max-open-files=true


    ※ node 의 의미

        elasticsearch 에서 node == index 에 의미를 가짐

:

elasticsearch 설치 및 한글형태소분석기 적용 따라하기.

Elastic/Elasticsearch 2012. 11. 16. 13:03

[ElasticSearch 설치하기]

    ※ 참고 URL

    http://www.elasticsearch.org/tutorials/2010/07/01/setting-up-elasticsearch.html

    http://mimul.com/pebble/default/2012/02/23/1329988075236.html

    https://github.com/chanil1218/elasticsearch-analysis-korean

    http://apmlinux.egloos.com/2976457


    ※ 다운로드

    wget --no-check-certificate https://github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.19.11.tar.gz


    ※ 압축해제

    tar -xvzf elasticsearch-0.19.11.tar.gz


    ※ 링크생성

    ln -s elasticsearch-0.19.11 elasticsearch


    ※ 설정

    cd elasticsearch/config

    vi elasticsearch.yml

        # cluster.name: elasticsearch

        cluster.name: MyCluster


        # network.host: 192.168.0.1

        network.host: 10.101.254.223


        # http.port: 9200

        http.port: 9200


    ※ 실행

    bin/elasticsearch -f

    OR

    bin/elasticsearch -p pidfile


    ※ 기능확인

    curl -X GET http://10.101.254.223:9200/


    ※ 관리툴설치

    bin/plugin -install mobz/elasticsearch-head

    http://10.101.254.223:9200/_plugin/head/


    ※ 한글형태소분석기설치

    bin/plugin -install chanil1218/elasticsearch-analysis-korean/1.1.0


    ※ 한글형태소분석기 설정 (elasticsearch 재실행 후 설정)

    curl -XPUT http://10.101.254.223:9200/test  -d '{

    "settings" : {

        "index": {

            "analysis": {

                "analyzer": {

                    "kr_analyzer": {

                        "type": "custom"

                            , "tokenizer": "kr_tokenizer"

                            ,"filter" : ["trim","kr_filter"]

                    }

                    , "kr_analyzer": {

                        "type": "custom"

                            , "tokenizer": "kr_tokenizer"

                            ,"filter" : ["trim","kr_filter"]

                    }

                }

            }

        }

    }

    }'


    ※ 한글형태소분석기 테스트

    curl -XGET 'http://10.101.254.223:9200/test/_analyze?analyzer=kr_analyzer&pretty=true' -d '전주비빔밥'

        ※ 한글형태소분석결과

        {

          "tokens" : [ {

            "token" : "전주비빔밥",

            "start_offset" : 0,

            "end_offset" : 5,

            "type" : "word",

            "position" : 1

          }, {

            "token" : "전주",

            "start_offset" : 0,

            "end_offset" : 2,

            "type" : "word",

            "position" : 2

          }, {

            "token" : "비빔밥",

            "start_offset" : 2,

            "end_offset" : 5,

            "type" : "word",

            "position" : 3

          } ]

        }

:

solr + tomcat 연동 시 admin 에서 한글 검색 이슈

Elastic/Elasticsearch 2012. 11. 14. 15:50

solr + tomcat 연동은 이미 이전 글에 있습니다.
solr 로 검색해 보시면 되구요.

tomcat 기본설치 후 solr admin 에서 한글이 깨지지 않게 하려면 server.xml 에 아래 내용을 추가해 주셔야 합니다.

뭐 기본이니 다들 아시겠지만.. ^^;

<Connector port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

            URIEncoding="UTF-8"

               redirectPort="8443" />

설정 후 재시작 하셔야 합니다. ㅎㅎ

: