문제
전체 텍스트 검색을 수행할 때 제품 정보가 포함된 MySQL 테이블에서는 일치하는 용어가 있어도 결과가 반환되지 않습니다. 예를 들어, "제품" 열에서 "펜" 또는 "펜 1개"를 검색하면 결과가 반환되지 않습니다.
조사
테이블 스키마를 검토한 결과, "Product" 열이 FULLTEXT 인덱스로 정의된 것으로 확인되었습니다. 그런데 테이블에는 "펜"과 "펜 1개"라는 용어가 포함된 두 행의 데이터만 포함되어 있습니다.
해결책
1. 데이터 다양성 증가:
전체 텍스트 검색 알고리즘에는 의미 있는 패턴을 감지하기 위해 충분한 양의 데이터가 필요합니다. 두 행의 데이터만으로는 알고리즘이 일반적인 단어와 흔하지 않은 단어를 구분할 수 없어 검색 결과가 좋지 않았습니다.
예:
CREATE TABLE testproduct ( Id VARCHAR(16), prod_name TEXT, ProductIdType VARCHAR(8), PRIMARY KEY (Id), FULLTEXT (prod_name) ) ENGINE=MyISAM; insert into testproduct (id,prod_name,productidtype) values ('B00005N5PF','one pen and a good price for a pen','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('B570J5XS3C',null,'ASIN');
다양한 용어와 구문이 포함된 더 많은 데이터를 통해 알고리즘은 단어를 더 잘 분류하고 검색을 개선할 수 있습니다. 정확성.
2. 중지 단어 재정의:
MySQL은 일반적으로 전체 텍스트 검색에서 제외되는 중지 단어라고 하는 일반 단어 목록을 유지 관리합니다. 그러나 경우에 따라 불용어가 검색과 관련될 수 있습니다.
예:
-- Disable stopword filtering SET ft_stopword_file = ''; -- Rebuild FULLTEXT indexes ALTER TABLE testproduct REBUILD INDEX prod_name;
기본 불용어 목록을 재정의하면 "연도"와 같은 관련 용어가 " 또는 "점수"가 검색결과에 포함될 수 있습니다.
3. 부울 및 자연어 모드 사용:
부울 모드는 정확한 일치가 필요한 반면, 자연어 모드는 변형 및 동의어를 허용합니다. 자연어 모드를 사용하면 검색 결과의 범위가 넓어집니다.
예:
SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('+harpoon +article' IN NATURAL LANGUAGE MODE);
이러한 기술을 사용하면 전체 텍스트 검색 기능을 향상하여 정확한 정보를 제공할 수 있습니다. 다양한 검색어에 대한 의미 있는 결과를 얻을 수 있습니다.
위 내용은 데이터 부족 및 중지 단어로 인해 MySQL 전체 텍스트 검색이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!