2011-08-06 4 views
0

"title", "description"등과 같은 비디오 데이터가있는 테이블이 있습니다. MySQL 전체 텍스트 인덱싱을 사용하여 검색 엔진을 작성하려고합니다. SQL 쿼리는 모든 단어가 아닌 일부 단어에서만 작동합니다. 다음은 내 SQL 쿼리입니다.MySQL Fulltext (Not) 검색

SELECT * 
FROM videos 
WHERE MATCH (title, description) AGAINST ('XXXXXXXXXX' IN NATURAL LANGUAGE MODE) 

여기서 "XXXXXXXX"를 검색어로 바꿉니다. 그것은 "otomotiv"로 작동하지만 "otomoti"로는 작동하지 않습니다. "otomoti"가 전체 단어 "otomotiv"의 일부이기 때문에 "otomotiv"를 발견하면 "otomoti"를 찾을 필요가 없습니까?

"NATURAL LANGUAGE MODE"또는 "QUERY EXPANSION"으로 검색 모드를 변경했지만 운이 아직 없습니다.

MySQL이 전체 단어의 일부를 찾을 수없는 것은 정상입니까?

답변

2

와일드 카드 연산자를 지원하므로 부울 전체 텍스트 검색을 수행해야합니다.
http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

SELECT * 
FROM videos 
WHERE MATCH (title, description) AGAINST ('otomoti*' IN BOOLEAN MODE) 
+0

그것은 작동합니다, 감사합니다. 그렇다면 "potomotiv"와 같은 다른 변형이있을 수 있으므로 반대 의견 ('* otomoti *'in BOOLEAN MODE)을 작성하는 것이 현명합니까? (별표 b/c 죄송합니다. 별표 사이의 모든 부분을 굵은 텍스트로 변경합니다). –

+0

아니요, 단어의 시작 부분에 별표를 사용할 수 없습니다. 하위 문자열 검색을 수행하려면 "LIKE"연산자를 살펴보십시오. –

+0

"LIKE"가 "FULLTEXT"보다 느리다 고 생각했습니다. 그게 사실이라면 내가 FULLTEXT를 써야만하는 것보다 낫지, 그렇지? http://forums.mysql.com/read.php?24,126294 "LIKE"를 사용하는 것이 더 나은지 잘 모르겠습니다. –