Elasticsearch 중국어 단어 기 IK
분사 기 를 뭘 사용 하 냐 고요?이 문 제 는 역 렬 색인 이라는 개념 과 관련 이 있 을 수 있 습 니 다. 그것 은 역 렬 색인 이 무엇 입 니까?
역 배열 색인 (영어: Inverted index) 은 역방향 색인, 파일 삽입 또는 역방향 파일 이 라 고도 불 리 며 전체 텍스트 검색 에 저 장 된 한 단어 가 한 문서 나 한 문서 에 저 장 된 위 치 를 나타 내 는 색인 방법 입 니 다.그것 은 문서 검색 시스템 에서 가장 자주 사용 하 는 데이터 구조 이다.두 가지 서로 다른 역방향 색인 형식 이 있 습 니 다.
후자 의 형식 은 더 많은 호환성 (예 를 들 어 구문 검색) 을 제공 하지만 더 많은 시간 과 공간 이 필요 합 니 다.위 키 백과 가 내 놓 은 비교적 공식 적 인 해석 이다.
통속 적 인 관계 형 데이터 베 이 스 를 사용 하면 특정한 필드 의 일부 내용 을 키워드 로 설정 할 수 있 습 니 다. 이 키 워드 는 논리 적 인 색인 (소재 필드, 소재 필드 위치 기록) 입 니 다. 이 색인 을 통 해 이 필드 와 소재 필드 의 구체 적 인 위 치 를 찾 을 수 있 습 니 다. 물론 필드 가 완전히 일치 하면 이 데 이 터 를 얻 을 수 있 습 니 다.(이 해석 은 역 배열 색인 에 대한 왜곡 이 존재 하 므 로 공식 적 이거 나 정확 한 정의 로 사용 할 수 없고 측면 적 으로 만 그 의 미 를 해석 하기 위해 서 입 니 다)
여기까지 만 얘 기 하면 이미 분사 기의 작용 을 알 고 있 을 지도 모른다.왜 중국어 분사 기 를 말 합 니까?elasticsearch 는 중국 이 창조 한 것 이 아니 기 때문에 사람들 은 중국어 단 어 를 기본적으로 지원 하지 않 습 니 다.
본문
설치 방법
github 버 전 대응 관계 elasticsearch - analysis - ik 확인 버 전 후 releases 에서 다운로드 하거나 복사 경 로 를 확인 합 니 다.
ik 단 어 는 두 가지 설치 방식 이 존재 합 니 다.
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.3/elasticsearch-analysis-ik-6.4.3.zip
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.