복붙노트

[SQL] 이노 검색 전체 텍스트

SQL

이노 검색 전체 텍스트

나는 그것의 부분은 부드럽게, 20M + 행 성장해야합니다 토론 게시물의 MySQL 데이터베이스입니다 대용량 웹 응용 프로그램을 개발하고 있어요.

((가) 전체 텍스트 검색 기능을 내장 용)에 의한 하나의 쓰기 작업을하지만, 전체 테이블의 생각이 고정되고 셔터 나를 만드는 나는 원래 테이블의 MyISAM을 사용하여 계획되었다. 행 수준 잠금이 훨씬 더 이해 (큰 테이블을 처리 할 때 이노의 다른 속도의 장점을 언급하지 않기 위하여). 그래서, 이런 이유로, 나는 꽤 이노을 사용하기로 결정하고 있습니다.

문제는 ... InnoDB는 내장되어 있지 않습니다되는 전체 텍스트 검색 기능을 제공합니다.

나는 타사 검색 시스템으로 가야하나요? 마찬가지로 루씬 (C ++) / 스핑크스? 당신이 데이터베이스 닌자의 어떠한 제안 / 지침을합니까? (Lucene을 기반으로) 링크드 인의 zoie 순간에 최선의 선택 같은 외모 ... 실시간 기능을 중심으로 구축 된 (내 응용 프로그램을 위해 매우 중요하다.) 나는 몇 가지 통찰력없이 아직 커밋 약간 주저 해요 ...

(참고 : 프론트 엔드를 제공하는 PHP를 사용하여 높은 메모리 릭과 EC2에있을 것)

해결법

  1. ==============================

    1.내가 나쁜 옵션 인 전체 텍스트의 MyISAM을 보증 할 수 - 심지어 제외하고 일반적으로 MyISAM 테이블과 함께 다양한 문제를 떠나, 나는 전체 텍스트 물건 레일을 이동 자체를 손상하고 정기적으로 MySQL의 충돌 시작 보았다.

    내가 나쁜 옵션 인 전체 텍스트의 MyISAM을 보증 할 수 - 심지어 제외하고 일반적으로 MyISAM 테이블과 함께 다양한 문제를 떠나, 나는 전체 텍스트 물건 레일을 이동 자체를 손상하고 정기적으로 MySQL의 충돌 시작 보았다.

    MySQL은 / ​​이노의 포스트 데이터를 저장하고 검색 엔진에 텍스트를 내보낼 - 전용 검색 엔진은 확실히 여기에서 가장 유연한 옵션이 될 것입니다. 당신은 /주기 전체 인덱스 빌드를 설정 아주 쉽게 게시하고, 당신이 필요성을 느끼고 시간을 보내고 싶은 경우에 실시간 인덱스 업데이트를 추가 할 수 있습니다.

    루씬와 스핑크스는 좋은 경량 Xapian입니다, 좋은 옵션입니다. 당신은 내가 하나의 장단점을 논의하기 위해 정말 자격이 아니에요 있지만 Clucene 더 나은, 당신은 자바와 씨름하지 않으려는 경우에도 가정하지 않는 루씬 경로를 이동합니다.

  2. ==============================

    2.의 MyISAM 중 일반 위상과 함께, InnoDB의 전체 텍스트 검색 (FTS)는 MySQL의 5.6.4 버전에서 마지막으로 사용할 수 있습니다.

    의 MyISAM 중 일반 위상과 함께, InnoDB의 전체 텍스트 검색 (FTS)는 MySQL의 5.6.4 버전에서 마지막으로 사용할 수 있습니다.

    http://dev.mysql.com/doc/refman/5.6/en/innodb-table-and-index.html#innodb-fulltext-index에서 :

    다른 엔진은 서로 다른 기능을 많이 가지고 있지만, 그것은 (업그레이드 경로가 있다는 뜻하는) 기본 그래서이 하나 InnoDB는,이다, 그게 가치있는 옵션이 있습니다.

  3. ==============================

    3.당신은 시간을 보내고 설치 및 스핑크스와 루씬의 테스트 드라이브를 통해 가야한다. 하나가 데이터 업데이트와 관련하여, 사용자의 요구를 충족하는 경우를 참조하십시오.

    당신은 시간을 보내고 설치 및 스핑크스와 루씬의 테스트 드라이브를 통해 가야한다. 하나가 데이터 업데이트와 관련하여, 사용자의 요구를 충족하는 경우를 참조하십시오.

    스핑크스에 대해 저를 실망하는 일 중 하나는 아주 잘 증분 삽입을 지원하지 않는다는 것입니다. 즉, 삽입 후 인덱싱 자신의 권장 솔루션 나이가 변하지 행과 새, 휘발성 행으로 데이터를 분할하는 것입니다 너무 비싼 매우 비싼입니다. 모든 검색 귀하의 응용 프로그램은 두 번 검색해야 않습니다 된 행에 대한 또한 최근 행에 대한 작은 인덱스에 더 큰 인덱스에 한 번. 즉 당신의 사용 패턴과 통합하지 않는 경우,이 스핑크스 (현재 구현 적어도되지 않음) 좋은 해결책이 아니다.

    구글 맞춤 검색 : 나는 당신이 고려할 수있는 또 다른 가능한 해결책을 지적하고 싶습니다. 당신은 색인 아웃소싱 다음, 웹 응용 프로그램에 일부 SEO를 적용하고 Google에 기능을 검색하고 사이트에 Google 검색 텍스트 필드를 포함 할 수 있습니다. 이 사이트 검색을 할 수있는 가장 경제적이고 확장 성있는 방법이 될 수 있습니다.

  4. ==============================

    4.아마 당신은 너무 빨리 MySQL의의 FT를 기각해서는 안된다. 크레이그리스트는 그것을 사용하는 데 사용됩니다.

    아마 당신은 너무 빨리 MySQL의의 FT를 기각해서는 안된다. 크레이그리스트는 그것을 사용하는 데 사용됩니다.

    아래의 주석으로, 크레이그리스트는 2009 년 초 스핑크스에 약간의 시간을 전환 한 것으로 보인다.

  5. ==============================

    5.당신이 지적으로 스핑크스는이 물건에 대한 아주 좋은 것입니다. 모든 작업은 구성 파일에 있습니다. 확인 테이블이 문자열 무엇이든 몇 가지 고유 한 정수 ID 키가, 당신도 잘해야합니다.

    당신이 지적으로 스핑크스는이 물건에 대한 아주 좋은 것입니다. 모든 작업은 구성 파일에 있습니다. 확인 테이블이 문자열 무엇이든 몇 가지 고유 한 정수 ID 키가, 당신도 잘해야합니다.

  6. ==============================

    6.이 시도

    이 시도

    ROUND((LENGTH(text) - LENGTH(REPLACE(text, 'serchtext', ''))) / LENGTH('serchtext'),0)!=0
    
  7. ==============================

    7.당신은 스핑크스를 살펴 보셔야합니다. 그것은 시도 가치가있다. 그것은의 색인은 슈퍼 빠른이며 배포됩니다. 이 (http://www.percona.com/webinars/2012-08-22-full-text-search-throwdown) webminar 살펴 보셔야합니다. 그것은 검색에 대해 이야기하고 산뜻한 약간의 벤치 마크가 있습니다. 당신은 도움이 될 수있는.

    당신은 스핑크스를 살펴 보셔야합니다. 그것은 시도 가치가있다. 그것은의 색인은 슈퍼 빠른이며 배포됩니다. 이 (http://www.percona.com/webinars/2012-08-22-full-text-search-throwdown) webminar 살펴 보셔야합니다. 그것은 검색에 대해 이야기하고 산뜻한 약간의 벤치 마크가 있습니다. 당신은 도움이 될 수있는.

  8. ==============================

    8.다른 모든 실패하면 항상 슬프게 정말 빠르고 정확하지 않은,이 soundex_match 것

    다른 모든 실패하면 항상 슬프게 정말 빠르고 정확하지 않은,이 soundex_match 것

  9. from https://stackoverflow.com/questions/1381186/fulltext-search-with-innodb by cc-by-sa and MIT license