2012-12-24 2 views
1

나는 MySQL의 전체 텍스트 검색을 지원하지 않는 RDS에서 InnoDB를 사용합니다. 나는 대안을 찾고있다. 내 응용 프로그램은 Heroku에 있으며 검색 기능을 제공하는 다양한 애드온을 고려했지만 매우 큰 회사 테이블 (~ 100M 레코드)을 보유하고 있으며 값이 비싸다고 생각합니다. 테이블의 한 필드 (회사 이름) 만 검색하면됩니다.MySQL에서 키워드 테이블 생성 (전체 텍스트 검색 대신)

따라서 나는 '키워드'테이블을 직접 작성하려고합니다. 본질적으로 이는 모든 회사 이름에 포함 된 모든 단어를 나열합니다. 그런 다음이 키워드와 company_id 간의 연관성을 보여주는 다른 테이블이 있습니다.

  1. 소리가 좋은가요? 더 좋은 대안이 있습니까?

  2. 키워드 표와 연결 표를 만드는 가장 효율적인 방법은 무엇입니까? 가능한 경우 T-SQL을 사용하여 작업을 수행하려고합니다.

답변

1

당신도 할 수 있으며 LIKE '%word%' 개의 쿼리를 사용하는 것보다 훨씬 낫습니다.

그러나 적절한 전체 텍스트 인덱싱을 사용하는 것만 큼 좋지는 않습니다.

내 프레젠테이션 Full Text Search Throwdown을 참조하십시오. 여기서는 대략 키워드 솔루션과 유사한 trigrams를 포함한 MySQL의 전체 텍스트 솔루션을 비교합니다.

가장 빠른 해결책은 스핑크스 검색이었습니다.

+1

동의. 모든 외부 텍스트 검색 엔진은 MySQL 기반 검색보다 빠르고 강력합니다. Sphinx는 다음 사이트에서 다운로드 할 수 있습니다 : http://sphinxsearch.com/downloads/release/ – vfedorkov

+0

MySQL에서 알고있는 색인에 의존하지 않습니까? 예 : "단어 표"만 만들면 정말 지적인 것이 아닙니다. 그러나 damerau-levenshtein http://stackoverflow.com/q/14232851/318765를 사용하여 확장하면 비슷한 단어를 찾을 수 있습니다. 다음 단계에서는 "단어 그룹"("개 놀이"결과 "개", "개 놀이")가 포함 된 두 번째 표를 추가 할 수 있습니다. 따라서 전체 문장을 바탕으로 최상의 매칭 결과를 찾을 수 있습니다. 이러면 BM25와 같은 결과가됩니다. https://en.wikipedia.org/wiki/Okapi_BM25 개념의 질문. – mgutt

+0

@mgutt, Damerau-Levenshtein 거리 계산을 사용하려고하면 색인을 생성 할 방법이 없습니다. 테이블의 모든 행에 대한 거리를 계산해야합니다. 사용해보기를 환영합니다. 그러나 'LIKE'% word % ''검색과 동일한 수준으로 검색을 수행하는 것이 비용이 많이 듭니다. –

관련 문제