문제

한계 또는 gotchas 또는 antipatterns 또는 함정은 무엇입니까?

꽤 매력적으로 보입니다. 분명히 거의 작업이없는 검색 엔진을 만들 수 있습니다. 그러나 그것은 문제 없이는 될 수 없습니다 ...

당신의 경험은 무엇입니까?

도움이 되었습니까?

해결책

제 생각에, 가장 큰 단점은 MySQL 전문 인덱싱이 MyISAM 테이블로 제한된다는 것입니다. InnoDB 테이블에 반대 의견이 생겨서 거래와 같은 중요한 기능이 많이 부족합니다.

다른 팁

문제 없이는 할 수 없습니다 ...

확실히 그렇지 않습니다!

순전히 차단 된 단어로 구성된 검색어는 조용히 실패합니다. 최소/최대 길이 제한 및/또는 스톱워드 파일로 인해 단어를 차단할 수 있습니다.

기본 스톱워드 파일이 너무 공격적인 것을 발견했는데 많은 유효한 검색을 방지했습니다. 또한 기본 최소 길이 4는 사람들이 검색하고자하는 약어를 위해 매우 자주 차고있었습니다. ft_min_word_len을 3으로 줄이고 stoplist를 완전히 제거했습니다 (ft_stopword_file = ''). 문서: http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html

검색 쿼리를 검사하여 <4 글자 단어 만 포함되어 있는지 확인 하고이 경우 같은 검색으로 돌아갈 수 있습니다. 응용 프로그램 수준에서 스톱리스트를 돌아 다니는 쉬운 방법은 없습니다.

'단어 캐릭터'의 선택은 귀하의 요구를 충족시키지 못할 수 있으며 변경하기가 까다 롭습니다. 예를 들어 "Terry"를 검색하는 것은 "Terry 's"와 일치하지 않습니다. 일반적으로 어떤 종류의 스템에 대한 지원은 없으므로“비스킷”도“비스킷”도 일치하지 않습니다.

마지막으로 CG가 언급했듯이 InnoDB에 대한 지원은 없습니다. 이 시대에 모든 데이터를 MyISAM 테이블에 넣고 싶지는 않습니다.

예비 스토리지가있는 경우, 당신이 할 수있는 일은 Main, Canonical 버전의 데이터를 InnoDB 테이블에 넣은 다음 SearchBait으로 사용하기 위해 Freetext 컨텐츠의 사본을 포함하는 별도의 MyISAM 테이블을 작성하는 것입니다. 변경 사항에서 두 테이블을 모두 업데이트해야하지만 MyISAM 테이블이 무결성을 잃으면 적어도 실제 라이브 데이터를 부수고 애플리케이션 오류를 얻는 대신 관련 행을 검색 할 수있는 기능 만 상실합니다.

그런 다음 여분의주기가 있으면 SearchBait에서 자신의 텍스트 처리 및 쿼리 단어를 구현하여 위의 제한 사항 중 일부를 얻을 수 있습니다. 예를 들어 Word-Characters가되고 싶은 문자를 탈출하고 Word-Characters가되고 싶지 않은 문자를 제거하고 간단한 수동 영어 스템밍을 수행 할 수 있습니다.

큰 테이블의 경우 MySQL 구성 파일에서 버퍼 크기와 캐시 제한을 늘려야합니다.

또한 검색에서 사용하는 매치 () 열은 인덱스의 열과 동일해야합니다.

Bobince의 매우 좋은 답변 외에도 MySQL 문서에는 전체 텍스트 제한에 대해 이야기하는 기사가 있습니다. 도움이 되었기를 바랍니다. http://dev.mysql.com/doc/refman/en/fulltext-restrictions.html (Olafur Waage는 이미이 중 하나에 대해 이야기했습니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top