MySQL 전체 텍스트 검색 실패



full-text-search (1)

이것이 내가 테스트 한 것입니다.

mysql> select * from product;
+------------+---------+---------------+
| Id         | Product | ProductIdType |
+------------+---------+---------------+
| B00005N5PF | one pen | ASIN          |
| B000J5XS3C |         | ASIN          |
+------------+---------+---------------+
2 rows in set (0.00 sec)

mysql> select * from product p where match (p.Product) against ('pen' in boolean mode);
Empty set (0.00 sec)

mysql> select * from product p where match (p.Product) against ('one pen' in boolean mode);
Empty set (0.00 sec)

이것은 문장입니다.

CREATE TABLE product
(
    Id                VARCHAR(16),
    Product           VARCHAR(128),
    ProductIdType     VARCHAR(8),
  PRIMARY KEY (Id),
  FULLTEXT (Product)
) ENGINE=MyISAM;

등호와 '좋아요'가 정상적으로 작동합니다. 왜?

https://ffff65535.com


-- drop table testproduct;
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');
insert into testproduct (id,prod_name,productidtype) values ('C00ZZ5N5PF','let us get rid of some noise','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('D00LL5N5PA','four score and seven years ago our fore...','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('EEEZZ5N5PF','he has a harpoon','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C01ZZ5N5PF','and then we','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('B00ZZ5N5PF','he has a pen in his pocket not a banana','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C02ZZ5N5PF','went to the store','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C03ZZ5N5PF','and decided that we should buy some','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C04ZZ5N5PF','fruit cups or fruit or berries or pebbles','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C037Z5N5PF','then he and her she and it','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C04K95N5PF','threw some daggers and a harpoon','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('D88895N5PF','more noise and some of this','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('D34595N5PF','this article about harpoons really drills into the throwing of harpoon or harpoons to those that deserve a harpoon','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('D12395N5PF','and there we go','ASIN');

전체 텍스트 검색은 반복적 인 '잡음'을 없애기 위해 약간의 다양성이 필요합니다. 최소한의 데이터로 테스트하면 결과가 좋지 않습니다. 의미있는 것이 나올 수 있도록 컬렉션 전체를 버리십시오. 아래의 일부 링크에서 볼 수 있듯이 검색하려는 단어의 최소 크기에 대한 설정이 있습니다.

단어 중지

검색 과정에서 건너 뛴 중요하지 않은 단어를 나타내는 다양한 언어로 된 MySql Stop Words 목록이 있습니다. 이 목록은 서버로 컴파일되지만이 매뉴얼 페이지 와 텍스트에서 볼 수 있듯이 무시할 수 있습니다.

기본 중지 단어 목록을 대체하려면 ft_stopword_file 시스템 변수를 설정하십시오. (5.1.4 절.“서버 시스템 변수”를 참조하십시오.) 변수 값은 스톱 워드 목록이 포함 된 파일의 경로 이름이거나 스톱 워드 필터링을 비활성화하려면 빈 문자열이어야합니다. 서버는 다른 디렉토리를 지정하기 위해 절대 경로 이름이 지정되지 않은 경우 데이터 디렉토리에서 파일을 찾습니다. 이 변수의 값 또는 중지 단어 파일의 내용을 변경 한 후 서버를 다시 시작하고 FULLTEXT 색인을 다시 빌드하십시오.

일부 샘플 쿼리

-- select * from testproduct
SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('score' IN BOOLEAN MODE);
SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('harpoon' IN BOOLEAN MODE);
SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('banana' IN BOOLEAN MODE);
SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('years' IN BOOLEAN MODE);

여러 단어를 일치 시키려면 :

SELECT id,prod_name, match( prod_name )
AGAINST ( '+harpoon +article' IN BOOLEAN MODE ) AS relevance
FROM testproduct 
ORDER BY relevance DESC

relevance 열에 실제 가중치를 부여합니다.

SELECT id,prod_name, match( prod_name )
AGAINST ( '+harpoon +article' IN NATURAL LANGUAGE MODE) AS relevance
FROM testproduct 
ORDER BY relevance DESC
+------------+--------------------------------------------------------------------------------------------------------------------+--------------------+
| id         | prod_name                                                                                                          | relevance          |
+------------+--------------------------------------------------------------------------------------------------------------------+--------------------+
| D34595N5PF | this article about harpoons really drills into the throwing of harpoon or harpoons to those that deserve a harpoon | 3.6207125186920166 |
| EEEZZ5N5PF | he has a harpoon                                                                                                   | 1.2845110893249512 |
| C04K95N5PF | threw some daggers and a harpoon                                                                                   | 1.2559525966644287 |
|------------+--------------------------------------------------------------------------------------------------------------------+--------------------+

여러 단어 섹션을 here 에서 올렸습니다. 고마워 스펜서





full-text-search