부울 모드의 MySQL FullText: 문자열의 일부로 '+'가 포함된 키워드 검색
나는 '비슷한' 질문들을 12개 봤지만 운이 없었다.이해는 합니다.+
BOULLANT 모드의 FULLTEXT 키워드에 부가된 것은 특별한 의미가 있지만, 만약 우리의 키워드가 실제로+
텍스트/문자열의 접미사 부분으로 기호를 지정합니다.FULL-TEXT 검색을 사용하여 적절한 결과를 얻을 수 있는 방법은 무엇입니까?
데이터베이스 구조
CREATE TABLE `ft_test` (
`i_id` int(11) NOT NULL,
`i_desc` mediumtext NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ALTER TABLE `ft_test`
ADD PRIMARY KEY (`i_id`) USING BTREE;
ALTER TABLE `ft_test` ADD FULLTEXT KEY `i_desc` (`i_desc`);
ALTER TABLE `ft_test`
MODIFY `i_id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
데이터베이스 데이터
SELECT * FROM ft_test;
+------+-----------+
| i_id | i_desc |
+------+-----------+
| 1 | test |
| 2 | test+ |
| 3 | test++ |
| 4 | test + |
| 5 | test plus |
+------+-----------+
테스트 #1: Like Query(쿼리처럼)
SELECT * FROM ft_test WHERE i_desc LIKE 'test+%';
+------+--------+
| i_id | i_desc |
+------+--------+
| 2 | test+ |
| 3 | test++ |
+------+--------+
테스트 2: 전문 쿼리
SELECT *, MATCH(`i_desc`) AGAINST ('"test+"' IN BOOLEAN MODE) AS RELEVANCE
-> FROM `ft_test`
-> WHERE MATCH(`i_desc`) AGAINST ('"test+"' IN BOOLEAN MODE)
-> ORDER BY RELEVANCE;
+------+-----------+-----------+
| i_id | i_desc | RELEVANCE |
+------+-----------+-----------+
| 1 | test | 1 |
| 2 | test+ | 1 |
| 3 | test++ | 1 |
| 4 | test + | 1 |
| 5 | test plus | 1 |
+------+-----------+-----------+
보시는 바와 같이 LIKE 쿼리는 실제로 결과를 반환하고 정렬하는 것이 더 좋습니다.정확한 일치에 대해서도 견적을 사용해 보았습니다만, 같은 결과입니다.'test\+'와 같은 'special' 문자를 추가하는 것도 도움이 되지 않았다.FT 결과는 쓸모없지는 않지만, 주문은 내가 예상했던 것과 다르기 때문에 완벽하지 않습니다.
질문.
실제로 FULLTEXT 모드를 사용하여 LIKE와 같은 결과를 반환할 수 있습니까?만약 그렇다면, 어떻게?
감사합니다!
문자를 구두점이 아닌 일반 문자로 처리하는 조회를 사용하여 열을 정의하는 경우에만 구두점 문자를 인덱싱할 수 있습니다.
이 조작 순서를 나타내는 메뉴얼 페이지가 있습니다.https://dev.mysql.com/doc/refman/8.0/en/full-text-adding-collation.html
그러나 스크립트가 하드 코딩되어 있다고 하셨기 때문에 검색 중인 컬럼의 조회를 재정의하거나 커스텀 조회 정의를 설치한 후 MySQL 서버를 재시작할 수 없습니다.
회피책은 구두점 없이 단어를 검색한 후 일치하는 단어를 찾은 후 적용할 조건을 추가하는 것입니다.
SELECT *, MATCH(`i_desc`) AGAINST ('"test"' IN BOOLEAN MODE) AS RELEVANCE
FROM `ft_test`
WHERE MATCH(`i_desc`) AGAINST ('"test"' IN BOOLEAN MODE)
AND i_desc LIKE 'test+%';
ORDER BY RELEVANCE;
전체 텍스트 인덱스를 사용하여 단어와 일치하는 행을 찾은 다음 다른 조건 용어는 문자열이 있는 행의 집합(바람직하게 작은)에 대해 필터링합니다.+
포함된.
그러나 SQL 쿼리를 변경할 수 있는 액세스 권한이 없는 경우 이는 무트입니다.
MySQL 전체 텍스트 검색에서 특수 문자를 인식하지 않습니다.단어만 검색하도록 되어 있습니다.+
그렇지 않습니다.
특수 문자를 필터링하려면LIKE
그게 네게 필요한 거야
또한 InnoDB를 통해+
기호는 단어 앞에만 배치될 때 특별한 의미가 있습니다.따라서 현재 쿼리는 실제로 다음과 같습니다.
MATCH(`i_desc`) AGAINST ('"test"' IN BOOLEAN MODE)
언급URL : https://stackoverflow.com/questions/54818233/mysql-fulltext-in-boolean-mode-searching-keywords-that-contain-as-part-of-t
'programing' 카테고리의 다른 글
파일 크기를 MB, GB 등으로 포맷 (0) | 2022.09.25 |
---|---|
jQuery를 사용하여 이미지 원본 변경 (0) | 2022.09.25 |
단일 쿼리를 사용하여 여러 날짜 간격당 항목 수 가져오기 (0) | 2022.09.25 |
레이아웃 할당 시 오류: BoxLayout을 공유할 수 없습니다. (0) | 2022.09.25 |
jar 파일을 실행하는 동안 매니페스트 기본 특성 예외에 대한 서명 파일 다이제스트가 잘못되었습니다. (0) | 2022.09.25 |