elasticsearch - 역렬 인덱스 원리

2895 단어 elasticsearch

인덱스


Elasticsearch는 빠른 전체 텍스트 검색에 사용할 수 있는 역렬 인덱스 구조를 사용합니다.역렬 인덱스는 문서에 중복되지 않는 모든 단어의 목록으로 구성되며, 그 중 모든 단어에 대한 문서 목록이 있습니다.
예를 들어, 두 개의 문서가 있다고 가정하면 각 문서의 content 도메인은 다음과 같습니다.
  • The quick brown fox jumped over the lazy dog
  • Quick brown foxes leap over lazy dogs in summer

  • 역렬 인덱스를 만들기 위해서, 우리는 먼저 각 문서의 content 영역을 단독 단어로 나누고, 중복되지 않는 모든 단어를 포함하는 정렬 목록을 만들고, 각 단어가 어떤 문서에 나타나는지 열거합니다.결과는 다음과 같습니다.
    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   |
    ------------------------

    현재 을 검색하려면 각 단어를 포함하는 문서를 찾아야 합니다.
    Term      Doc_1  Doc_2
    -------------------------
    brown   |   X   |  X
    quick   |   X   |
    ------------------------
    Total   |   2   |  1

    두 문서 모두 일치하지만 첫 번째 문서가 두 번째 문서보다 더 높습니다.만약 우리가 일치하는 단어의 수량만 계산하는 간단한 유사성 알고리즘을 사용한다면, 우리는 우리가 조회하는 관련성에 있어서 첫 번째 문서가 두 번째 문서보다 더 좋다고 말할 수 있다.
    그러나 현재 역렬 인덱스에 문제가 있습니다.
  • tokensquick brown은 독립된 단어로 나타나지만 사용자들은 같은 단어라고 생각할 수 있다.
  • Quickquick은 매우 비슷하다. 마치 foxfoxes과 같다.그들은 같은 어근을 가지고 있다.
  • dogdogs은 같은 어근이 없지만 그들의 뜻은 비슷하다.그들은 동의어이다.

  • 앞의 인덱스를 사용하여 jumped을 검색해도 일치하는 문서가 없습니다.(기억해라, leap 접두사는 이 단어가 반드시 존재해야 한다는 것을 나타낸다.)+Quick +fox+의 문서가 동시에 나타나야만 이 조회 조건을 만족시킬 수 있지만, 첫 번째 문서는 Quick, 두 번째 문서는 fox을 포함한다.
    우리의 사용자는 두 문서가 조회와 일치하기를 합리적으로 기대할 수 있다.우리는 더 잘할 수 있다.
    만약 우리가 단어를 표준 모델로 규범화한다면, 우리는 사용자가 검색한 단어와 완전히 일치하지 않지만, 충분한 관련성을 가진 문서를 찾을 수 있다.예:
  • quick foxQuick foxes으로 소문자화할 수 있다.
  • Quick은 어간 추출이 가능하며 어근으로 변하는 형식은 quick입니다.이와 유사하게 foxesfox으로 추출할 수 있다.
  • dogsdog은 동의어로 같은 단어 jumped으로 색인할 수 있습니다.

  • 현재 색인은 다음과 같이 보입니다.
    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
    ------------------------

    이것은 아직 턱없이 부족하다.우리가 검색한 leap은 여전히 실패할 것이다. 왜냐하면 우리의 색인에는 이미 jump이 없기 때문이다.그러나 만약에 우리가 검색한 문자열에 +Quick +fox역과 같은 표준화 규칙을 사용한다면 Quick을 조회하면 두 문서가 일치합니다!

    좋은 웹페이지 즐겨찾기