2010-06-30 6 views
4

현재 전체 텍스트 검색을 사용하고 있지만 속도가 느린 레코드를 검색하는 데 가장 좋은 기술이 될 수있는 10,000,000 개의 레코드가 있습니다.레코드 검색에 가장 적합한 기술은 무엇입니까

+0

자세한 내용과 코드 (테이블 구조에 관한 정보) – Thariama

+0

자세한 내용을 알려주십시오 : 검색 대상은 무엇이며, 얼마나 자주 사용하며 어떻게 표시됩니까? - 간단히 설명해주세요. –

+0

은 5 개의 테이블을 가진 데이터베이스의 경우를 고려하고 100 개의 열만있는 하나의 테이블에서만 seraching을하고 20 개의 테이블은 전체 텍스트를 위해 인덱싱됩니다. 모든 열 값은 텍스트 값이며 자주 변경됩니다.이 방법은 전문가 (여러분 모두)에게 도움이됩니다. :) – Jos

답변

1

그것은 몇 가지 간단한 질문에 따라 달라집니다

  • 이 어떤 종류의 데이터

    을 처리? "이름, 성"또는 더 복잡한 데이터 세트와 같은 (단순 항목?
  • 어떻게 그것을 구조화? (일반 데이터베이스 테이블? 분할?)
  • 무엇, 즉 (? 검색 전화 번호부에있는 이름)
  • 를 검색 할
7

이 더 획일적 인 솔루션입니다하지만 당신은 시도 할 수 있습니다

스핑크스

을 어떻게 전체 텍스트 바다를 구현합니까 그 1 천만 개의 행 테이블에 을 넣고 을로드 상태로 유지하고 관련성을 유지 하시겠습니까? 스핑크스는 수수께끼의 종류에 능숙합니다.

스핑크스는 GPL 버전 2 상용 라이센스에 따라 배포 전체 텍스트 검색 엔진, 입니다 임베디드 사용 사용할 수 있습니다.

일반적으로, 다른 애플리케이션에 빠르고 크기 효율 및 관련 전체 텍스트 검색 기능을 제공하기위한 독립형 검색 엔진입니다. 스핑크스 (Sphinx)는 을 데이터베이스 데이터베이스 및 스크립팅 언어와 잘 통합되도록 설계되었습니다. 현재 내장 데이터 소스 지원 가져 오는 데이터 중 하나의 MySQL 또는 PostgreSQL을, 또는 XML 파이프를 메커니즘 (스핑크스 인식 특별한 XML 기반 형식의 인덱서에 파이프를) 사용하는 직접 연결을 통해.

이름의 경우 스핑크스는 이라는 약어로 SQL 구의 색인으로 공식적으로 디코딩됩니다. 예, CMU의 스핑크스 프로젝트에 대해 알고 있습니다.

http://www.sphinxsearch.com/

Lucene PHP (Part of Zend Framework): 

Zend_Search_Lucene, 그것은 파일 시스템에 자사의 인덱스를 저장하고 데이터베이스 서버를 필요로하지 않기 때문에 완전히 PHP 5에서 을 작성 일반적인 목적 텍스트 검색 엔진입니다 거의 모든 PHP 구동 웹 사이트에 검색 기능을 추가 할 수 있습니다.Zend_Search_Lucene 는 다음과 같은 기능을 지원합니다 : - : 구문 쿼리, 부울 쿼리, 와일드 카드
쿼리, 근접 질의, 범위
쿼리 및 많은 다른 사람

  • 위 검색 최상의 결과를 먼저
  • 많은 강력한 쿼리 유형을 반환했습니다. 특정 필드에 의해
  • 검색 (예를 들어, 제목, 저자, 내용)
내가이 여기에 같은 그런 큰 데이터 세트와 함께 일하지 않았기 때문에

http://framework.zend.com/ http://framework.zend.com/manual/en/zend.search.lucene.overview.html

+0

+1은 Zend_Lucene을 제안합니다. 너무 많은 항목에는 사용하지 않았지만 절대로 성능에 문제가 없었습니다. – Maerlyn

0

는 수도 몇 가지 아이디어입니다 직장 :

첫 번째 질문은 이러한 기록이 정적 (geoip의 예) 여부입니다?

    , 데이터베이스를 최적화하려고 내가
  • 가 가능 할 수 있습니다 쿼리의 모든 종류를 찾아보십시오 (당신이 MySQL을 사용하는 경우 EXPLAIN를 사용해보십시오) 수만큼 내 데이터베이스를 최적화하기 위해 노력하겠다고
  • 이 쿼리들에 대해
  • 인덱스가 괜찮 으면 나는 이전의 결과 셋을 저장할 캐시의 종류와 함께 갈 것이다. 이것은 데이터베이스가 정기적으로 업데이트되지 않을 때 유용 할 것입니다.
  • 당신은 어쩌면 좀 더 세부 사항을 제공 할 수있는 경우 귀하의 요구

을위한 아이디어를 최적화하기 위해 시도 : (가장 많이 사용되는 검색 쿼리와 그 결과도 precached 할 수 있습니다 예를 들어)

  • 당신은 위의 작업을 cron을 수 나는 나의 조언을 다듬을 수있다.

  • +0

    이들은 매우 도움이되는 기술 전문가입니다. – Jos

    0

    Solr을 사용하십시오. http 프로토콜로 쉽게 접근 할 수있는 몇 가지 추가 사항이있는 lucene입니다. mysql의 전체 텍스트 검색과 비교해 볼 때 빠른 속도입니다.

    관련 문제