Programing

Lucene은 어떻게 작동합니까?

lottogame 2020. 9. 14. 21:33
반응형

Lucene은 어떻게 작동합니까?


lucene 검색이 어떻게 그렇게 빠르게 작동하는지 알고 싶습니다. 웹에서 유용한 문서를 찾을 수 없습니다. 읽을 것이 있으면 (lucene 소스 코드가 부족한 경우) 알려주십시오.

색인이있는 mysql5 텍스트 검색을 사용하는 텍스트 검색 쿼리는 필자의 경우 약 18 분이 걸립니다. 동일한 쿼리에 대한 lucene 검색은 1 초도 채 걸리지 않습니다.


Lucene은 반전 된 전체 텍스트 인덱스입니다. 즉, 모든 문서를 가져 와서 단어로 분할 한 다음 각 단어에 대한 색인 만듭니다 . 인덱스는 순서가없는 정확한 문자열 일치이므로 매우 빠를 수 있습니다. 가설 적으로 varchar필드 에 대한 SQL 비 정렬 인덱스는 그만큼 빠를 수 있으며 실제로 큰 데이터베이스가이 경우 간단한 문자열 같음 쿼리를 매우 빠르게 수행 할 수 있다는 것을 알게 될 것입니다.

Lucene은 트랜잭션 처리를 위해 최적화 할 필요가 없습니다. 문서를 추가 할 때 쿼리에서 문서가 즉시 표시되도록 할 필요는 없습니다 . 또한 기존 문서에 대한 업데이트를 최적화 할 필요가 없습니다.

그러나 하루가 끝날 때 정말로 알고 싶다면 소스를 읽어야합니다. 당신이 참조하는 두 가지 모두 오픈 소스입니다.


Lucene은 큰 인덱스를 만듭니다. 색인에는 단어 ID, 단어가있는 문서 수 및 해당 문서에서 단어의 위치가 포함됩니다. 따라서 단일 단어 쿼리를 제공하면 인덱스 만 검색합니다 (O (1) 시간 복잡도). 그런 다음 결과는 다른 알고리즘을 사용하여 순위가 매겨집니다. 여러 단어로 된 쿼리의 경우 단어가있는 파일 집합의 교차점을 가져옵니다. 따라서 Lucene은 매우 빠릅니다.

자세한 내용은 Google 개발자가 작성한이 기사를 읽으십시오. http://infolab.stanford.edu/~backrub/google.html


한마디로 인덱싱.

Lucene은 훨씬 더 빠르게 검색 할 수 있도록 문서의 색인을 만듭니다.

이는 목록 O (N) 데이터 구조와 해시 테이블 O (1) 데이터 구조의 동일한 차이점입니다. 목록은 원하는 것을 찾기 위해 전체 컬렉션을 살펴 봐야합니다. 해시 테이블에는 원하는 항목이 정확히 어디에 있는지 파악하고 간단히 가져올 수있는 인덱스가 있습니다.

최신 정보:

"Lucene 인덱스 검색이 mysql 인덱스 검색보다 훨씬 빠릅니다."라는 말이 무슨 뜻인지 잘 모르겠습니다.

내 생각 엔 MySQL "WHERE document LIKE '% phrase %'"를 사용하여 문서를 검색하고있는 것 같습니다. 이것이 사실이라면 MySQL은 모든 행에서 테이블 스캔을 수행해야하며, 이는 O (N)이됩니다.

Lucene은 문서를 토큰으로 구문 분석하고 사용자의 지시에 따라 n-gram으로 그룹화하고 각각에 대한 인덱스를 계산합니다. 색인화 된 Lucene 문서에서 단어를 찾는 것은 O (1)입니다.


Lucene은 용어 빈도 및 역 문서 빈도로 작동합니다 . 그것은 문서와 각 단어를 매핑하는 색인을 생성하고 문서에서 역 색인에 불과한 빈도 수입니다.

:

파일 1 : 랜덤 액세스 메모리가 주 메모리입니다.

파일 2 : 하드 디스크는 보조 메모리입니다.

Lucene은 다음과 같은 역 색인을 만듭니다.

파일 1 :

기간 : 무작위

주파수 : 1

위치 : 0

기간 : 기억

주파수 : 2

위치 : 3

위치 : 6

따라서 검색된 콘텐츠를 빠르게 검색하고 검색 할 수 있습니다. 검색어와 일치하는 항목이 너무 많으면 가중치를 기준으로 결과를 출력합니다. 검색 쿼리 "Main Memory"를 고려하면 4 개의 단어를 모두 개별적으로 검색하면 결과는 다음과 같습니다.

본관

파일 1 : 빈도-1

기억

파일 1 : 주파수-2

파일 2 : 주파수-1

결과는 File1 다음에 File2 입니다. 'and', 'or', 'the'와 같은 가장 일반적인 단어에 대한 가중치에 휩쓸 리지 않기 위해 역 문서 빈도를 고려합니다 (즉, 문서 집합 중에서 가장 인기있는 단어의 가중치를 줄입니다).

참고 URL : https://stackoverflow.com/questions/2705670/how-does-lucene-work

반응형