2012-09-21 5 views
0

MATCH AGAINST은 3 자 이하의 단어를 검색 할 수없는 것으로 나타났습니다. 그래서 LIKEMATCH AGAINST와 함께 에 넣고 쿼리에 추가했습니다.하나의 MySQL 쿼리에서 MATCH AGAINST와 LIKE를 모두 사용해도 괜찮습니까?

검색 쿼리 CSS와 자바 스크립트 팁

데이터베이스 항목 :

id | subject 
------------------------------------ 
1 | ten useful css tricks 
------------------------------------ 
2 | performance tip for javascript 

MySQL의 쿼리

3 자 단어 : CSS, 팁

SELECT id, MATCH (subject) AGAINST ('css and javascript tip' IN BOOLEAN MODE) 
FROM articles WHERE MATCH (subject) AGAINST ('css and javascript tip') 
OR subject LIKE '%css%' OR subject LIKE '%tip%' 

이 쿼리는 작은 데이터베이스로 내 응용 프로그램에서 제대로 작동합니다. 데이터베이스가 커지면 문제가 발생할지 잘 모르겠습니다.

일치 검색을 사용하는 동안 3 문자 단어를 검색하는 올바른 방법입니까? 그렇지 않다면 내가 제공 한 예와 같이 cssjavacript을 동시에 검색해야하나요?

답변

0

~ 100K 개의 행으로 처리하고 느리지 않습니다. 나는 대안이 있다고 생각하지만, 나를 위해이 여전히 충분하다 :

다음은 예입니다 : Windows 사용자의

//... 
$tokens = explode(' ',$s)); 
$squery = ''; 
array_map('trim', $tokens); 

foreach($tokens as $token){ 
    if(strlen($token)>3) 
     $squery .= "+$token* "; 
    else 
     $where .= " AND title LIKE '%$token%'"; 
if(!empty($squery)) 
    $select .= " , MATCH (title) AGAINST ('$squery' IN BOOLEAN MODE) AS score " 
//... 
0

, 당신은 MySQL을의 시스템 변수에 최소한의 단어를 변경할 수 있습니다. 일반적으로 programdata/mysql/mysql 서버 5.x 디렉토리에있는 my.ini 파일을 편집하십시오. 때로는 my.ini 파일을 프로그램 파일/mysql/mysql 서버 버전 5.x에 복사해야합니다.

ft_min_word_len = 2 
ft_stopword_file = "" 

다시 시작 MySQL은, 당신이 서비스에서이 작업을 수행 할 수 있습니다 중지 : 첫 번째는 [mysqld를] 아래에 다음을 삽입

윈도우 7에서 작동하는 동안 나는 윈도우 서버 2003 및 2008에 대한 경험으로 놀거나 어느 것을 알고 있는지.

테이블을 다시 색인화하고 엔진이 MYISAM인지 확인하십시오. 최근에는 InnoDB도 작동합니다.

ft_stop_word_file은 일부 단어가 일치에서 제외되도록하는 파일입니다. 정지 단어 파일이있는 경우 ""와 같거나 일반 텍스트 파일을 가리킬 수 있습니다. 나만의 무작위로 만든 스톱 워드 파일 예제 인 mystopword.txt를 만들 수 있습니다. 안쪽에 단어를 넣으면서 매칭에 포함시키지 않으려 고합니다.

관련 문제