Elasticsearch 중국어 단어 기 IK

10283 단어
머리말
분사 기 를 뭘 사용 하 냐 고요?이 문 제 는 역 렬 색인 이라는 개념 과 관련 이 있 을 수 있 습 니 다. 그것 은 역 렬 색인 이 무엇 입 니까?
역 배열 색인 (영어: Inverted index) 은 역방향 색인, 파일 삽입 또는 역방향 파일 이 라 고도 불 리 며 전체 텍스트 검색 에 저 장 된 한 단어 가 한 문서 나 한 문서 에 저 장 된 위 치 를 나타 내 는 색인 방법 입 니 다.그것 은 문서 검색 시스템 에서 가장 자주 사용 하 는 데이터 구조 이다.두 가지 서로 다른 역방향 색인 형식 이 있 습 니 다.
  • 기 록 된 수평 역방향 색인 (또는 역방향 파일 색인) 은 단 어 를 참조 하 는 모든 문서 의 목록 을 포함 합 니 다.
  • 한 단어의 수평 역방향 색인 (또는 완전 역방향 색인) 은 각 단어 가 한 문서 에 있 는 위 치 를 포함한다.

  • 후자 의 형식 은 더 많은 호환성 (예 를 들 어 구문 검색) 을 제공 하지만 더 많은 시간 과 공간 이 필요 합 니 다.위 키 백과 가 내 놓 은 비교적 공식 적 인 해석 이다.
    통속 적 인 관계 형 데이터 베 이 스 를 사용 하면 특정한 필드 의 일부 내용 을 키워드 로 설정 할 수 있 습 니 다. 이 키 워드 는 논리 적 인 색인 (소재 필드, 소재 필드 위치 기록) 입 니 다. 이 색인 을 통 해 이 필드 와 소재 필드 의 구체 적 인 위 치 를 찾 을 수 있 습 니 다. 물론 필드 가 완전히 일치 하면 이 데 이 터 를 얻 을 수 있 습 니 다.(이 해석 은 역 배열 색인 에 대한 왜곡 이 존재 하 므 로 공식 적 이거 나 정확 한 정의 로 사용 할 수 없고 측면 적 으로 만 그 의 미 를 해석 하기 위해 서 입 니 다)
    여기까지 만 얘 기 하면 이미 분사 기의 작용 을 알 고 있 을 지도 모른다.왜 중국어 분사 기 를 말 합 니까?elasticsearch 는 중국 이 창조 한 것 이 아니 기 때문에 사람들 은 중국어 단 어 를 기본적으로 지원 하지 않 습 니 다.
    본문
    설치 방법
    github 버 전 대응 관계 elasticsearch - analysis - ik 확인 버 전 후 releases 에서 다운로드 하거나 복사 경 로 를 확인 합 니 다.
    ik 단 어 는 두 가지 설치 방식 이 존재 합 니 다.
  • elasticsearch 의 elasticsearch - plugin 명령 을 통 해 설치 할 ik 분사 기 를 복사 하 는 링크 를 설치 하고 다음 과 같이 설치 하면 됩 니 다.이 방식 으로 생 성 된 ik 단어 기 설정 파일 을 elasticsearch 의 config 디 렉 터 리 에 설치 합 니 다
  • ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.3/elasticsearch-analysis-ik-6.4.3.zip
    
    
  • 압축 해제 방식 은 위 에서 말 한 주 소 를 통 해 elasticsearch 의 plgins 디 렉 터 리 에 압축 을 풀 면 됩 니 다. 이 방식 으로 ik 분사 기 설정 파일 은 압축 해제 패키지 의 하위 디 렉 터 리
  • 에 있 습 니 다.
    elasticsearch 를 다시 시작 하여 설치 완료 여 부 를 검증 합 니 다.
    curl 192.168.82.92:9200/_cat/plugins
    node-1 analysis-ik 6.4.3
    

    시 분사
    읽 을 때 단어: 사용자 가 조회 할 때 ES 는 사용자 가 입력 한 키 워드 를 즉시 단어 로 나 누고 단어 결 과 는 메모리 에 만 존재 하 며 조회 가 끝나 면 단어 결과 도 사라 집 니 다.다음은 읽 을 때 단 어 를 나 누 는 동작 을 보 여 줍 니 다. 저 는 kibana (elastic 산하 구성 요소) 에서 작업 할 것 입 니 다.
    #    
    PUT /word-segmenter?pretty=true
    #   
    {
      "acknowledged": true,
      "shards_acknowledged": true,
      "index": "word-segmenter"
    }
    
    #    
    GET /_cat/indices?v
    #   
    health status index          uuid                   pri rep docs.count docs.deleted store.size pri.store.size
    yellow open   word-segmenter 3YonvPYpSKyk4TOX74Ql9A   5   1          0            0      1.1kb          1.1kb
    
    #    
    POST /word-segmenter/article
    {
      "subject" : "    "
    }
    #   
    {
      "_index": "word-segmenter",
      "_type": "article",
      "_id": "hyL9GGwBQsOoFTCidV78",
      "_version": 1,
      "result": "created",
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      },
      "_seq_no": 0,
      "_primary_term": 1
    }
    
    #     
    GET /word-segmenter/_analyze?pretty=true
    {
      "analyzer" : "ik_max_word",
      "text" : "    "
    }
    #   
    {
      "tokens": [
        {
          "token": "  ",
          "start_offset": 0,
          "end_offset": 2,
          "type": "CN_WORD",
          "position": 0
        },
        {
          "token": "  ",
          "start_offset": 2,
          "end_offset": 4,
          "type": "CN_WORD",
          "position": 1
        }
      ]
    }
    
    #    
    POST /word-segmenter/_search?pretty=true
    {
      "query" : {
        "match": {
          "subject": {
            "query": "    ",
            "analyzer": "ik_max_word"
          }
        }
      }
    }
    #   
    {
      "took": 3,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 0,
        "max_score": null,
        "hits": []
      }
    }
    
    

    당신 은 결 과 를 조회 하지 못 하고 분명히 데 이 터 를 저 장 했 고 단어 도 사 용 했 습 니 다. 단어의 결과 인 '왕 자', '영광' 은 데이터 에 도 존재 합 니 다. 그 문 제 는 도대체 어디 에 있 습 니까?
    #   word-segmenter      
    GET /word-segmenter?pretty=true
    #   
    {
      "word-segmenter": {
        "aliases": {},
        "mappings": {
          "article": {
            "properties": {
              "subject": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              }
            }
          }
        },
        "settings": {
          "index": {
            "creation_date": "1563787157307",
            "number_of_shards": "5",
            "number_of_replicas": "1",
            "uuid": "3YonvPYpSKyk4TOX74Ql9A",
            "version": {
              "created": "6040399"
            },
            "provided_name": "word-segmenter"
          }
        }
      }
    }
    
    

    색인 구조의 반환 값 을 조회 할 때 subject 는 단어 기 를 사용 하 는 것 을 보지 못 했 습 니 다 (실제로 elasticsearch 의 기본 단어 기 를 사 용 했 습 니 다).문제 가 생 겼 다. 설마 다른 단어 기 를 사용 하면 결 과 를 찾 을 수 없 단 말 인가?다음은 다음 과 같이 확인 하고 검색 어 를 수정 하 겠 습 니 다.
    #
    POST /word-segmenter/_search?pretty=true
    {
      "query" : {
        "match": {
          "subject": {
            "query": " ",
            "analyzer": "ik_max_word"
          }
        }
      }
    }
    #   
    {
      "took": 11,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 1,
        "max_score": 0.2876821,
        "hits": [
          {
            "_index": "word-segmenter",
            "_type": "article",
            "_id": "hyL9GGwBQsOoFTCidV78",
            "_score": 0.2876821,
            "_source": {
              "subject": "    "
            }
          }
        ]
      }
    }
    
    

    데 이 터 를 조회 할 수 있 으 니 우선 위의 추측 을 배제 할 수 있다.그렇다면 단 어 를 나 누 는 문제 일 수 밖 에 없다. 기본 단 어 를 살 펴 보면 도대체 무엇 을 나 누 는 것 일 까?
    #     
    GET /word-segmenter/_analyze?pretty=true
    {
      "text" : "    "
    }
    #   
    {
      "tokens": [
        {
          "token": " ",
          "start_offset": 0,
          "end_offset": 1,
          "type": "",
          "position": 0
        },
        {
          "token": " ",
          "start_offset": 1,
          "end_offset": 2,
          "type": "",
          "position": 1
        },
        {
          "token": " ",
          "start_offset": 2,
          "end_offset": 3,
          "type": "",
          "position": 2
        },
        {
          "token": " ",
          "start_offset": 3,
          "end_offset": 4,
          "type": "",
          "position": 3
        }
      ]
    }
    
    

    위 를 통 해 우 리 는 두 개의 단어 구분 기의 결 과 를 확인 할 수 있 고 서로 존재 하지 않 기 때문에 우 리 는 결 과 를 검색 할 수 없 게 되 었 다.여기 서 우 리 는 시간 사 를 쓰 는 것 을 도입 할 것 이다.
    시 분 사 를 쓰다
    쓰기 시 단어: 문 서 를 기록 할 때 발생 하 는 ES 는 문 서 를 단 어 를 나 눈 후에 결 과 를 거꾸로 색인 에 저장 합 니 다. 이 부분 은 최종 적 으로 파일 형식 으로 디스크 에 저장 되 며 조회 가 끝나 거나 ES 재 부팅 으로 인해 잃 어 버 리 지 않 습 니 다.
    #       word-segmenter
    DELETE /word-segmenter?pretty=true
    #   
    {
      "acknowledged": true
    }
    
    #    ,         ik    
    PUT /word-segmenter?pretty=true
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "ik" : {
              "tokenizer" : "ik_max_word"
            }
          }
        }
      },
      "mappings": {
        "article" : {
          "properties": {
          "subject" : {
            "type": "text",
            "analyzer": "ik_max_word"
            }
          }
        }
      }
    }
    

    그리고 읽 을 때 단어의 데이터 삽입 과 조 회 를 실행 하면 찾 을 수 있 습 니 다.검색 할 때 수 동 으로 사용 할 단어 기 를 만 들 지 않 아 도 데 이 터 를 조회 할 수 있다.
    사용자 정의 단어 기
    위 에서 우 리 는 '왕 의 영광' 을 '왕 의 영광', '영광' 이라는 단어 로 나 누 는 것 을 테스트 했다. 그러나 나 는 '왕 의 영광' 도 하나의 단어 로 어떻게 조작 하고 싶 을 까?ik 분사 기 는 우리 에 게 사전 을 확장 하 는 방식 을 제공 했다.
    #   ik          (              )
    cd /home/software/elasticsearch-6.4.3/config/analysis-ik/
    
    #        
    vim /my_extra_word.dic 
    
    #    ,       
        
    
    #   ik       
    vim IKAnalyzer.cfg.xml 
    
    #          ,      “;”     
    
    
    
            IK Analyzer     
            
            my_extra_word.dic
             
            
            
            
            
            
    
    
    #   elasticsearch
    kill -9 9200
    cd /home/software/elasticsearch-6.4.3/
    ./bin/elasticsearch -d
    
    #    
    GET /word-segmenter/_analyze?&pretty=true
    {
      "analyzer": "ik_max_word", 
      "text" : "    "
    }
    #   
    {
      "tokens": [
        {
          "token": "    ",
          "start_offset": 0,
          "end_offset": 4,
          "type": "CN_WORD",
          "position": 0
        },
        {
          "token": "  ",
          "start_offset": 0,
          "end_offset": 2,
          "type": "CN_WORD",
          "position": 1
        },
        {
          "token": "  ",
          "start_offset": 2,
          "end_offset": 4,
          "type": "CN_WORD",
          "position": 2
        }
      ]
    }
    

    인용 하 다.
    역 배열 색인 - 위 키 피 디 아 는 analysis API 를 파악 하여 Elasticsearch 단어 난 제 를 단번에 해결 합 니 다 ES 색인 맵 지정 단어 전략 elasticsearch 5.5.2 수 동 으로 색인 을 만 들 고 ik 중국어 단어 기 ES 중국어 단어 기 설정 + 사용자 정의 단어 centos 7 설치 elasticsearch 7 및 통합 IK 중국어 단어 기 추가 시스템 서비스 시작 Elasticsearch 중국어 단어 기 플러그 인 es - ik

    좋은 웹페이지 즐겨찾기