DB에서 전체 텍스트 검색을 수행하는 검색 쿼리가 있습니다.
$sql = "SELECT
*
FROM
`tbl_auction_listing` AS `al`
JOIN
`tbl_user` AS `u` ON `al`.`user_id` = `u`.`user_id`
LEFT JOIN
`tbl_gallery_details` AS `gd` ON `al`.`user_id` = `gd`.`user_id`
LEFT JOIN
`tbl_self_represented_details` AS `sr` ON `u`.`user_id` = `sr`.`user_id`
WHERE
`al`.`status` = '" . ACTIVE . "'
AND
`al`.`start_date` < NOW()
AND
`al`.`end_date` > NOW()
AND
MATCH(`al`.`listing_title`,
`al`.`description`,
`al`.`provenance`,
`al`.`title`,
`al`.`artist_full_name`,
`al`.`artist_first_name`,
`al`.`artist_last_name`,
`sr`.`artist_name`,
`gd`.`gallery_name`,
`u`.`username`) AGAINST('$search_query' IN BOOLEAN MODE)";
'Cardozo, Horacio'또는 'cardozo'또는 'horacio'를 검색하면 결과가 나타나지 않지만 db에 artist_full_name = Cardozo, Horacio 인 레코드가 2 개인 아티스트가 있다는 것을 알고 있습니다.
모든 MATCH 필드를 제거하고 al
. artist_full_name
만 있으면 2 개의 결과를 얻습니다. al
. description
을 추가하면 설명에 'Horacio Cardozo'가 있기 때문에 1 개의 결과를 얻습니다.
MATCH 필드에서 조건 (검색 쿼리 단어)이 충족되는 경우 검색에서 모든 레코드를 반환하도록하는 방법이 있습니까? IN BOOLEAN MODE를 제거하려고 시도했지만 동일한 결과가 생성되었습니다.
해결 방법
InnoDB 테이블은 동일한 MATCH ()
조건에서 여러 전체 텍스트 인덱스에 대한 검색을 허용하지 않는 것으로 보입니다.
여기에서 필드가 모두 동일한 테이블에 속하지는 않으므로 다른 인덱스로 덮여 있습니다. 다음과 같은 테이블이있는 경우 동일한 제한이 적용됩니다.
CREATE TABLE t (
f1 VARCHAR(20),
f2 VARCHAR(20),
FULLTEXT(f1), FULLTEXT(f2)
) ENGINE=InnoDB;
SELECT * FROM t
WHERE MATCH(f1, f2) AGAINST ('something in f2'); -- likely to return no row
결론은 MATCH ()
절당 하나의 단일 전체 텍스트 인덱스를 사용하도록 검색을 분할해야한다는 것입니다.
SELECT * FROM auction, user, gallery, ...
WHERE
MATCH(auction.field1, auction.field2) AGAINST ('search query' IN BOOLEAN MODE) OR
MATCH(auction.field3) AGAINST ('search query' IN BOOLEAN MODE) OR
MATCH(user.field1, user.field2, user.field3) AGAINST...
다음은 경매
에 두 개의 개별 색인이 있고 user
에 하나의 색인이있는 경우 가능한 쿼리를 보여줍니다. 실제 구조에 맞게 조정해야합니다 (추가 지침이 필요한 경우 테이블 설명을 게시하십시오).
MyISAM과 달리 InnoDB는 부울 전체 텍스트 검색을 지원하지 않습니다. nonindexed columns, but this restriction was not enforced, resulting 잘못된 결과를 반환 한 쿼리
참조 페이지 https://stackoverflow.com/questions/17459278
'MySql' 카테고리의 다른 글
MySQL cakephp에서 최신 기록을 찾는 방법은 무엇입니까? (0) | 2020.12.28 |
---|---|
MySQL WHILE 루프의 mysqli 쿼리 (0) | 2020.12.28 |
MySQL 외래 키와 MySQL 다 대다 관계 (0) | 2020.12.28 |
MySQL 오늘 날짜가 발생하는지 어떻게 확인합니까? (0) | 2020.12.28 |
MySQL MYSQL 값을 기반으로 특정 색상으로 셀 PHP 강조 (0) | 2020.12.28 |
댓글