elasticsearch 기초 입문(3)
인덱스
Elasticsearch는 빠른 전체 텍스트 검색에 사용할 수 있는 역렬 인덱스 구조를 사용합니다.역렬 인덱스는 문서에 중복되지 않는 모든 단어의 목록으로 구성되며, 그 중 모든 단어에 대한 문서 목록이 있습니다.
예를 들어, 문서당
content
도메인에 다음과 같은 두 개의 문서가 있다고 가정합니다.역렬 인덱스를 만들기 위해서, 우리는 먼저 각 문서의
content
영역을 단독 단어
또는 tokens
로 나누고, 중복되지 않는 모든 단어를 포함하는 정렬 목록을 만들고, 각 단어가 어떤 문서에 나타나는지 열거합니다.결과는 다음과 같습니다.Term Doc_1 Doc_2
-------------------------
Quick | | X
The | X |
brown | X | X
dog | X |
dogs | | X
fox | X |
foxes | | X
in | | X
jumped | X |
lazy | X | X
leap | | X
over | X | X
quick | X |
summer | | X
the | X |
------------------------
이제 Quick brown을 검색하려면 각 단어를 포함하는 문서를 찾아야 합니다.
Term Doc_1 Doc_2
-------------------------
brown | X | X
quick | X |
------------------------
Total | 2 | 1
두 문서 모두 일치하지만 첫 번째 문서가 두 번째 문서보다 더 높습니다.만약 우리가 일치하는 단어의 수량만 계산하는 간단한 유사성 알고리즘을 사용한다면, 우리는 우리가 조회하는 관련성에 있어서 첫 번째 문서가 두 번째 문서보다 더 좋다고 말할 수 있다.
그러나 현재 역렬 인덱스에 문제가 있습니다.
Quick
과quick
는 독립된 단어로 나타나지만 사용자는 같은 단어라고 생각할 수 있다.fox
과foxes
는 매우 비슷하다. 마치dog
과dogs
.그들은 같은 어근을 가지고 있다.jumped
과leap
는 같은 어근이 없지만 뜻이 비슷하다.그들은 동의어이다.앞의 색인 검색
+Quick +fox
을 사용하면 일치하는 문서가 없습니다.(기억해라, +
접두사는 이 단어가 반드시 존재해야 한다는 것을 나타낸다.)Quick
과fox
가 동시에 나타나는 문서만이 이 조회 조건을 만족시킬 수 있지만, 첫 번째 문서는 quick fox
, 두 번째 문서는 Quick foxes
를 포함한다.우리의 사용자는 두 문서가 조회와 일치하기를 합리적으로 기대할 수 있다.우리는 더 잘할 수 있다.
만약 우리가 단어를 표준 모델로 규범화한다면, 우리는 사용자가 검색한 단어와 완전히 일치하지 않지만, 충분한 관련성을 가진 문서를 찾을 수 있다.예:
Quick
는 소문자quick
로 바꿀 수 있다.foxes
는 어간 추출이 가능하며 어근의 형식은 fox
입니다.이와 유사하게dogs
는 dog
로 추출할 수 있다.jumped
과leap
는 동의어로 같은 단어jump
로 색인할 수 있다.현재 색인은 다음과 같이 보입니다.
Term Doc_1 Doc_2
-------------------------
brown | X | X
dog | X | X
fox | X | X
in | | X
jump | X | X
lazy | X | X
over | X | X
quick | X | X
summer | | X
the | X | X
이것은 아직 턱없이 부족하다.색인에 Quick이 없기 때문에 + Quick + fox를 검색하는 데 실패합니다.단, 검색된 문자열에 대해 콘텐츠 필드와 같은 표준화 규칙을 사용하면 검색 +quick +fox가 되어 두 문서가 일치합니다!
이것은 매우 중요하다.색인에 나타나는 단어만 검색할 수 있기 때문에 색인 텍스트와 검색 문자열은 같은 형식으로 표준화되어야 합니다.
분석 및 분석기
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.