구문 분석 -analysis
해결 -analysis
그것은 단어로 이해 될 수있다.
리졸버는 내장 및 사용자 정의 두 종류를 포함하여, 파서 --analyzer에 의해 수행 구문 분석.
1.1 파서
1.1.1. 내장 파서
문서 : https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html
표준 분석 : 경계를 무너 뜨리는 단어, 대부분의 문장은 중지 단어의 제거를 지원, 소문자 단어를 무시됩니다.
간단한 분석 : 단어 포인트 알파벳이 아닌 문자는 소문자로 편지를 포맷.
공백 분석기 :하지 실행 소문자의 공백 문자 분할 포인트.
분석 중지 : 간단한 분석기와 비슷한,하지만 중지 단어의 제거를 지원했다.
패턴 분석 : 일반 분석 단어
언어 분석기 : 다른 언어로 단어
지문 분석기 :
지문 분석기는 중복 검색에 사용할 수있는 지문을 생성하는 전문가의 분석이다.
1.1.2. 사용자 정의 파서
일시적으로 참여.
1.2. 색인 단어 / 단어 검색
인덱스 잘 이해 워드 인덱스를 형성하는 단어 분할 쓰기된다.
각 텍스트 필드는 고유 분석기를 지정합니다;
지정되지 않은 경우, 인덱스 설정으로 기본 / 기본 매개 변수는 기본적으로 표준 분석기를 우선.
검색 단어
검색 문의 경우, 단어는 표제어 기본 파서를 사용하여 수행됩니다;
검색 단어는 독립적으로 단어의 설정 될 수 있지만, 일반적으로 필요가 없습니다.
1.2.1. 분할 예
예를 들어 내장 영어 파서 :
"빠른 갈색 여우가 게으른 개를 뛰어 넘었다!"
첫째 소문자의 정지 단어, 고주파있는 단어 프로토 타입에 단어를 변환 제거, 최종 결과는 순서는 다음과 같습니다
[빠른, 갈색, 여우, 점프, 오버, lazi, 개]
2. 케이스
환경 구성 :
인덱스 test_i 만들기
기본 구성을, 필드 MSG 만들기 사용, 즉, 표준 토크 나이
, 필드 msg_english 만들기 영어 단어 분리기를 사용;
# 테스트 환경 만들기
D = { "MSG": "사과를 먹는 하루는 의사를 멀리 유지합니다."}
RV = es.index ( "test_i"d)
Q. RW ()
D = { "속성"{
"msg_english": {
"유형": "텍스트",
"분석기": "영어"
}}}
RV = es.indices.put_mapping (본체 = D, 인덱스 = "test_i은"]) # 일반적 true를 반환
#보기 데이터 구조
RV = es.indices.get_mapping (INDEX_NAME)
{
"test_i": {
"매핑": {
"속성": {
"MSG": {
"유형": "텍스트",
"필드": {
"키워드": {
"유형": "키워드"
"ignore_above": 256
}}}
"msg_english": {
"유형": "텍스트",
"분석기": "영어"
}}}}}
문서에 :
D는 = { "msg_english는": "하루에 사과를 먹는 것은 멀리 의사를 유지합니다."}
RV = es.index ( "test_i"d)
쿼리 : 쿼리는 두 부분으로, 필드 MSG에 의해 첫 경기 먹고, 아니 안타 항목, 쿼리 msg_english 필드로 나누어 져 있습니다
# 검색 API를
데프 search_api_test () :
데이터 = { "쿼리": { "일치": { "msg_english을": "먹는"}}}
RV = es.search (인덱스 = "test_i」= 본체 데이터)
Q. RW ()
search_api_test ()
결과
{ "했다": 2,
"TIMED_OUT"거짓,
"_shards": {
"총": 1,
"성공": 1,
"생략": 0,
"실패": 0
},
"히트": {
"총": {
"값"1
"관계": "EQ"
},
"MAX_SCORE": 0.2876821,
"히트"[
{
"_index": "test_i"
"_type": "_doc"
"_id": "XG7KFG0BpAsDZnvvGLz2"
"_score": 0.2876821,
"_source": {
"msg_english": "하루에 멀리 의사를 계속 사과를 먹고."
}}]}}
단어 시험, 육안 검사 표준 단어와 영어 단어의 차이 : 보충
테스트 코드 :
# 분사 테스트
D1 = { "분석기": "표준", "텍스트": ". 하루에 멀리 의사를 계속 사과를 먹는"}
D2 = { "분석기": "영어", "텍스트" ". 하루에 멀리 의사를 계속 사과를 먹는"}
RV1 = es.indices.analyze (본체 = D1의 포맷 = "텍스트")
RV2 = es.indices.analyze (본체 = D2를 포맷 = "텍스트")
인쇄 ([X RV1에 대한 X] [ "토큰"[ "토큰"]) # (D1)의 분할 결과
인쇄 ([X RV2에 대한 X] [ "토큰"[ "토큰"]) # (D2)의 분할 결과
출력 :
[ '멀리', '이', '사과', 'A', '일', '유지', '의사' '먹고']
[ 'awai', 'APPL', '다이가', '유지', '의사' '먹고']