2010-07-15 3 views
1

테이블의 특정 열을 검색하는 검색 텍스트 필드가 있지만 예상대로 결과가 아닙니다.특정 테이블에 대한 검색 빌드

사용자가 "hello world how"와 같은 검색을 시도하면 검색어가 LIKE '% hello world how %'인 결과를 찾지 못합니다. 테이블 행에는 "hello world"문자열이 포함됩니다.

어떻게하면 php와 mysql을 사용하여 적절한 검색을 수행 할 수 있습니까? 여러 테이블/테이블의 모든 열을 검색해야하는 경우 어떻게해야합니까? 가장 좋은 방법은 무엇입니까?

답변

2

하나 불량이 방법은 공백에 사용자의 검색 텍스트를 분할하는 것입니다. "hello world how"가 "hello % world % how"가 될 것입니다. 그러나 "hello world"다음에 "how"라는 단어가 필요하며 "hello"와 "world"가 서로 가깝다는 것을 보장하지는 않습니다.

또한 검색중인 열에 인덱스를 넣더라도 와일드 카드 문자 (%) 으로 별표가 표시된 LIKE 절은 MySQL에서 해당 인덱스을 사용할 수 없습니다. 즉, 모든 검색은 전체 테이블 검색이됩니다. 꽤 느려질 수 있습니다.

하나의 해결책은 MySQL fulltext search 일 수 있습니다. 꽤 유연합니다. 그러나 MyISAM 테이블에서만 작동합니다. MyISAM은 외래 키나 트랜잭션을 지원하지 않기 때문에 아마도 InnoDB를 데이터로 사용하고 싶을 것이다. 검색 목적으로 만 MyISAM과 전체 텍스트 인덱싱을 사용하는 전용 테이블을 별도로 만들 수 있습니다.

Sphinx은 다른 옵션입니다. MySQL 및 PHP에 연결할 수있는 타사 검색 시스템입니다.

그러나 이러한 모든 대답은 한 번에 한 열씩 검색하는 데 초점을 맞추고 있습니다. 전체 행을 검색해야하는 경우 조금 더 재미있을 것입니다. ElasticSearch과 같은 "문서"기반 검색 시스템을 고려할 수 있습니다.

관련 문제