2012-09-02 3 views
0

작업 : 4000 만 개의 이름을 가진 데이터베이스에서 와일드 카드로 이름 검색에 가장 적합한 검색 결과를 검색하십시오. 예 : 'John', 'Smith John', 'ajohn'
후보자 : : MySQL 전체 텍스트, 스핑크스 및 Lucene.
관측 : 나는 이들 모두가 짧은 "문서"(이름)를위한 최선의 해결책이 아닌 역 색인과 함께 작업한다고 가정하고 트라이가 훨씬 더 적합 할 수 있습니다.40Million 이름을 통해 와일드 카드 검색에 가장 적합한 인덱스 만들기

이 관찰이 맞다고 가정하면,이 도구들은 내 경우에 더 적합한 구성을 가지고 있습니까? PHP에서 쉽게 통합 할 수있는 다른 도구가 있습니까?

감사합니다.

답변

2

저는 스핑크스 만 말할 수 있습니다. 그것은 와일드 카드 검색을 특별히 가능하게하는 'min_prefix_len'을 가지고 있습니다.

그것은 각각의 일치하는 두 모드

1) 예 조니 조니, Johnn 존, 요, 조, J로 저장된다 (별도로 저장된 단어 각각의 프리픽스)를 갖는다. 정말 빠른 검색이지만 인덱스 크기와 인덱싱 속도를 희생합니다.

2

) 원시 단어가 actully 저장되고, 접두사 다음에 일치합니다. 훨씬 더 간결한 색인 및 빠른 색인 생성. 하지만 검색 속도가 그리 좋지 않습니다. 스핑크스는 아직 최적화를 구현하지 않았습니다. 예를 들어 단어 목록을 trie에 저장하는 것이 좋습니다. 전용 솔루션이 스핑크스보다 성능이 뛰어날 수 있습니다.

모드 1에서 제안하겠습니까? 작업은 원만하게 - mysql보다 낫다. (하지만 Lucene과 비교하면 어떻게 될지 모르겠다.)

+0

당신은 'mysql보다 낫다.'라고 말했습니까? 인덱스를 작성하면 INSERTS가 느리게 작동합니다. mysql 인덱스? 그리고 SELECTS는 x 배 더 될 것인가? – Noam