나는 제품 표를 가지고 있습니다. 자동차. 사용자가 여러 검색어를 사용하여 검색 할 수 있기를 바랍니다. 자동 완성을 위해. LIKE % term %은 거대한 테이블이기 때문에 느려집니다. 빠르게하기 위해 MySQL의 전체 텍스트 검색을 사용하고 싶습니다. ft_min_word_lenght = 1을 사용합니다.글자/숫자로 MySQL 전체 텍스트가 나뉘어졌습니다.
제품 이름이 "Lexus RX450H"라고 가정 해보십시오. 그런 다음 두 단어로 색인이 생성됩니다 : "Lexus"및 "RX450H".
MATCH (productname) AGAINST ('+lex* +rx45*' IN BOOLEAN MODE) ')
이 제품은 좋을 것입니다.
하지만
MATCH (productname) AGAINST ('+lex* +450*' IN BOOLEAN MODE) ')
못해,이 단어의 시작에서 검색하는 것이 필수적이기 때문.
사용자가 숫자를 알고 있지만 문자를 잊어 버릴 수도 있습니다. 일치하는 두 번째 쿼리를 원합니다.
제품이 "Lexus RX 450 H"인 경우 마지막 쿼리가 문제를 해결했을 것입니다.
내가 할 수있는 것은 테이블에 두 번째 열을 만들고 두 문자 사이에 공백을 넣어 모든 문자/숫자를 분할하는 것입니다 (예 : regexp를 사용합니다. 그런 다음이 칼럼에서 검색을 수행해야합니다. 문제는 해결되었습니다.
그러나 (큰) 테이블의 크기가 거의 두 배로 커지고 여분의 열을 만들지 않고 설명 된 것처럼 색인을 수행하도록 MySQL에 알릴 수 있는지 궁금합니다.
다음과 비슷한 질문입니다 : http://stackoverflow.com/questions/10731187/mysql-regexp-usage-within-boolean-match-against하지만 그는 생각, 정규식을 BOOLEN 모드와 결합 할 수 없습니다 – user4035