ElasticSearch 분사기 요약

9045 단어 elasticsearch

1. ik,pinyin 분사기


오늘 통신록으로 ES 검색 기능을 보여 줍니다. 이름 검색을 할 때 중국어와 병음을 모두 검색할 수 있도록 하려고 합니다. 그래서 이전에 자주 사용했던 중국어 분사기 ik를 제외하고 병음 분사기 pinyin을 다운로드했습니다. 사용 상황은 다음과 같습니다.
1. 다운로드
ik:https://github.com/medcl/elasticsearch-analysis-ik pinyin:https://github.com/medcl/elasticsearch-analysis-pinyin
2. 설치
다운로드한 파일을 압축을 풀고es 폴더plugins에 넣으면ik,pinyin 폴더를 새로 만들 수 있습니다.그중에서pinyin 분사기는 왜 zip 파일을 직접 다운로드할 수 없는지 모르겠습니다. 그래서 원본 코드를 다운로드해서 포장하고 압축을 풀고plugins/pinyin에 넣습니다.
3. pinyin 분사기 테스트
GET _analyze?pretty
{
  "analyzer": "pinyin",
  "text": " "
}

결과:
{
  "tokens": [
    {
      "token": "liu",
      "start_offset": 0,
      "end_offset": 0,
      "type": "word",
      "position": 0
    },
    {
      "token": "de",
      "start_offset": 0,
      "end_offset": 0,
      "type": "word",
      "position": 1
    },
    {
      "token": "hua",
      "start_offset": 0,
      "end_offset": 0,
      "type": "word",
      "position": 2
    },
    {
      "token": "ldh",
      "start_offset": 0,
      "end_offset": 0,
      "type": "word",
      "position": 2
    }
  ]
}

4. 색인 템플릿의 분사기 설정
템플릿 설정에서 분사기 설정
"analysis" : {
            "analyzer" : {
                "ik" : {
                    "tokenizer" : "ik_max_word"
                },
                "pinyin_analyzer" : {
                    "tokenizer" : "my_pinyin"
                }
            },
            "tokenizer" : {
                "my_pinyin" : {
                    "keep_separate_first_letter" : "false",
                    "lowercase" : "true",
                    "type" : "pinyin",
                    "limit_first_letter_length" : "16",
                    "remove_duplicated_term" : "true",
                    "keep_original" : "true",
                    "keep_full_pinyin" : "true",
                    "keep_joined_full_pinyin":"true",
                    "keep_none_chinese_in_joined_full_pinyin":"true"
            }
          }
        }

그중 my_pinyin에서 설정 항목은https://github.com/medcl/elasticsearch-analysis-pinyin문서에 설명이 있습니다. 자신의 요구에 따라 설정할 수 있습니다.
5、mapping에서 type 만들기
하나의 속성에 여러 개의 분사기 필드를 설정할 수 있습니다:
 "mappings": {
         "doc": {
            "properties": {
                "PERSON_ENAME": {
                  "type" : "text",
                  "fields" : {
                        "ik" : {"type" : "text", "analyzer" :"ik"},
                        "english": { "type":"text","analyzer": "english"},
                        "standard" : {"type" : "text"}
                    }
               },
                "CONTACTER_NAME": {
                  "type" : "text",
                  "fields" : {
                        "ik" : {"type" : "text", "analyzer" :"ik"},    
                        "pinyin": { "type":"text","analyzer": "pinyin_analyzer"},                       
                        "standard" : {"type" : "text"}
                    }
               }               
            }
         }
      } 

6. 테스트
여러 필드에서 질의
POST sim/doc/_search
{
  "query": {
    "multi_match" : {
    "query" : "dfbb",
    "fields" : [
      "PERSON_ENAME.ik", 
      "PERSON_ENAME.standard",
      "PERSON_ENAME.english",
      "CONTACTER_NAME.ik", 
      "CONTACTER_NAME.standard",
      "CONTACTER_NAME.pinyin"]
    }
  }
}

좋은 웹페이지 즐겨찾기