2010-07-06 4 views
1

사람과 모든 연락처 정보를 나열하는 테이블이 있습니다. 나는 사용자가 테이블에 지능형 검색을 수행하기 위해 단순히 물건을 입력하고 각 용어가 입력 된 결과가 테이블의 열 중 적어도 하나와 일치하는 지 확인하고자합니다. 내가여러 테이블 열에서 여러 용어를 검색하려면 어떻게합니까?

SELECT * FROM contacts WHERE 
    firstname LIKE '%Bob%' 
OR lastname LIKE '%Bob%' 
OR phone LIKE '%Bob%' OR 
... 

같은 쿼리를 만들었을 시작하지만 지금은 별도로 먼저 마지막 이름을 검색 할만큼 똑똑하지 않기 때문에 그 완전히 '밥 젠킨스'같은 간단한에 실패 실현합니다. 내가해야 할 일은 검색어를 나누어 개별적으로 검색 한 다음 각 용어의 결과를 어떻게 든 교차시키는 것입니다. 적어도 그것은 저에게 해결책 같이 보인다. 그러나 그것에 대해 가장 좋은 방법은 무엇입니까?

나는 fulltext와 MATCH() ... AGAINST()에 대해 들었지만 오히려 퍼지 검색처럼 들리지만 설치하는 것이 얼마나 많은 작업인지 모르겠다. 합리적인 수행으로 정확한 예 또는 아니오 결과를 원합니다. 검색은 약 20 열 120,000 행으로 수행되어야합니다. 사용자가 2 ~ 3 개 이상의 단어를 입력하지 않기를 바랍니다.


오, 죄송 합니다만, MySQL (및 PHP)를 사용하고 있습니다.

전 텍스트 검색을 알아 냈습니다. 얼마나 엄격한지를 조정할 수있는 방법이 있습니까? LIMIT는 얼마나 잘 일치하는지에 관계없이 결과를 잘라냅니다. 그러나 이것은 전체 텍스트 인덱스를 필요로하고 내 웹 사이트는 뷰를 사용하고 뷰를 올바르게 인덱싱 할 수 없습니까? 그래서 ...

+0

어떤 데이터베이스를 사용하고 있습니까? 각각은 다른 기능과 기능을 제공하므로 도움이됩니다. – Oded

답변

0

BOOLEAN MODE

SELECT * FROM contacts WHERE 
MATCH(firstname,lastname,email,webpage,country,city,street...) 
AGAINST('+bob +jenkins' IN BOOLEAN MODE) 

부울 모드는 매우 강력하다. 내 모든 필요를 충족시킬 수도 있습니다. 나는 약간의 시험을해야 할 것이다. 검색 용어 앞에 +을 삽입하면 해당 용어가 필요하게됩니다. (행은 'bob'또는 'jenkins'대신 'bob'AND 'jenkins'와 일치해야합니다). 이 모드는 인덱싱되지 않은 열에서도 작동하기 때문에 느린 속도 (필자가 테스트 할 필요가 있음)이지만 뷰에서 사용할 수 있습니다. 마지막으로 한 가지 문제는 부분 검색 용어와 일치하지 않아 '밥'이 '바비'를 찾지 못한다는 것입니다. 보통 % 와일드 카드가 작동하지 않습니다. 대신 별표 *을 사용하십시오.

0

나는 MATCH/AGAINST를 사용하는 것이 좋습니다. 전체 텍스트 검색은 고급 검색으로 Google보다 덜 초보적인 검색입니다.

여러 테이블에서 일치시킬 수 있으며 일치하는 항목의 수를 표시 할 수 있습니다.

그렇지 않으면 단어가 전혀 없으면 esp. 여러 표에서 순위가 ​​없습니다. 서버 측 순위를 매길 수는 있지만 더 많은 프로그래밍/시간이 소요될 것입니다.

사용중인 데이터베이스에 따라 교차 열을 수행하는 기능이 다소 어려워 질 수 있습니다. 매우 느린 쿼리이므로 20 개의 JOIN을 사용하지 않으려 고합니다.

이러한 유형의 검색을 수행하는 Sphinx 및 Lucene과 같은 엔진도 있습니다.

+0

검색의 모든 조건과 일치하는 결과 만 수락 할 수있는 방법이 있다면 전체 텍스트가 트릭을 수행 할 것이라고 생각합니다. 보기에 그것을 사용할 수 없다는 문제를 제외하고 ... – Moss

+0

MATCH/AGAINST 키워드를 이해하는 방법 및 OP에 대한 샘플 검색어를 제공해주십시오. –

+0

그래서 검색하면 예제가 있습니다 : http://stackoverflow.com/questions/2378366/mysql-how-to-make-multiple-table-fulltext-search –

관련 문제