2010-04-24 3 views
68

lucene 검색이 어떻게 그렇게 빨리 작동하는지 알고 싶습니다. 웹에서 유용한 문서를 찾을 수 없습니다. 읽을만한 소스 코드가 부족하다면 알려주십시오.Lucene은 어떻게 작동합니까?

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

+1

을 개발자 등? Lucene은 이제 플랫폼처럼 들립니다. – asyncwait

답변

63

Lucene은 반전 된 전체 텍스트 색인입니다. 즉, 모든 문서를 가져 와서 단어로 분할 한 다음 각 단어에 대해 색인을 만듭니다. 색인은 순서가 정해지지 않은 문자열이기 때문에 매우 빠르다. 가설로, varchar 필드의 SQL 순서가 지정되지 않은 색인은 매우 빠르다. 사실 큰 데이터베이스가 매우 간단한 문자열 - 평등 쿼리를 수행 할 수 있다고 생각한다.

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

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

+0

정확하게 이해한다면, 텍스트 검색 엔진을 따로 설정하는 것은 다중 단어 검색을 처리하고 검색 결과를 실시간으로 여러 인덱스에 결합하는 방법입니다. 나는 이것을 위해 Lucene 소스에 대한 컨설팅을 제안하지 않을 것이다.아마 텍스트 검색 이론에 대해 조금 더 읽는 것이 낫습니다. @ alienCoder의 대답이 도움이되었습니다. –

+1

@bmargulies, 색인 생성이 "단어 단위"인 경우 stackoverflow 사용자가 http://stackoverflow.com/users에서 하위 문자열 일치를 검색하는 이유는 무엇입니까? – Pacerier

+1

이것은 전체 도서 답변을위한 장소가 아닙니다. 거기에 기본 개념에 대한 여러 가지 정교한 작업이 있습니다. – bmargulies

16

단어 : 색인 생성.

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

목록 O (N) 데이터 구조와 해시 테이블 O (1) 데이터 구조 사이의 동일한 차이점이 있습니다. 목록은 원하는 것을 찾기 위해 전체 컬렉션을 거쳐야합니다. 해시 테이블에는 원하는 항목의 위치를 ​​정확히 파악하고 단순히 가져올 수있는 색인이 있습니다.

업데이트 : ". 루씬 인덱스 검색이 훨씬 빨리 MySQL의 인덱스 검색보다"나는에 의해 당신이 무슨 뜻인지 확실하지 않다

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

Lucene은 문서를 토큰으로 구문 분석하고 사용자 방향으로 n 그램으로 그룹화 한 다음 각 문서에 대한 색인을 계산합니다. 색인 된 Lucene 문서에서 단어를 찾으려면 O (1)입니다.

+8

예 인덱스 부분은 이해하지만, lucene 인덱스 검색은 mysql 인덱스 검색보다 훨씬 빠릅니다. 어떻게됩니까? – Midhat

21

Lucene은 큰 색인을 생성합니다. 색인에는 단어 ID, 단어가있는 문서의 번호 및 해당 문서의 단어 위치가 포함됩니다. 따라서 단일 단어 쿼리를 제공하면 색인 (O (1) 시간 복잡도) 만 검색합니다. 그런 다음 결과는 서로 다른 알고리즘을 사용하여 순위가 결정됩니다. 다중 단어 쿼리의 경우 단어가있는 파일 집합의 교차 부분을 가져옵니다. 그래서 Lucene은 매우 빠릅니다. 구글이 기사를 읽고 더 많은 정보를 들어

은 커뮤니티 위키로 변환 할 나는이 질문을 요청할 수 http://infolab.stanford.edu/~backrub/google.html

+4

관리를 읽으십시오.이 문서를 보니 꽤 도움이되었습니다. 특히 "4.5 Searching"에는 내가 찾고있는 대답이있었습니다. 특히, O (1) 해시 검색이 개별 단어에 사용 된 것처럼 들리지만 O (n) 검색을 사용하여 결과를 40,000 개의 문서 한도로 결합합니다. 사용자가 즉각적인 결과를 얻을 수 있도록 map-reduce 알고리즘을 사용하여이 작업을 분할했다고 가정합니다. –

+0

인기있는 알고리즘 중 하나는 비둘기 순위 알고리즘입니다. 나는 그것에 대해 많이 알지는 못한다. – alienCoder

+2

그 논문은 흥미 롭습니다 : "이 문서에서 우리는 프로토 타입 인 Google을 소개합니다 ...". 구글은 항상 메가 - 코퍼레이션이 아니었다 고 생각합니다. – Buttons840

관련 문제