> 데이터 베이스 > MySQL 튜토리얼 > mysql5.7.25의 전체 텍스트 검색 기능을 사용하는 방법

mysql5.7.25의 전체 텍스트 검색 기능을 사용하는 방법

王林
풀어 주다: 2023-05-28 17:34:06
앞으로
1663명이 탐색했습니다.

머리말

프로젝트에서 전체 텍스트 검색 기능을 사용해야 하는 경우가 있으며, 전체 텍스트 검색 횟수가 상대적으로 적고, elasticsearch와 같은 별도의 전용 인덱싱 도구를 구축하고 싶지 않은 경우에는 사용을 고려해 볼 수 있습니다. mysql과 함께 제공되는 전체 텍스트 검색 기능.

mysql 5.7.25에는 전체 텍스트 검색 기능이 포함되어 있어 매우 편리합니다.

MySQL 5.7.6 이전에는 전체 텍스트 인덱스는 영어 전체 텍스트 인덱스만 지원하고 중국어 전체 텍스트 인덱스는 지원하지 않았습니다. 중국어 단락을 전처리하고 단어로 분할하려면 단어 분할기를 사용해야 했습니다. 데이터베이스에 저장합니다.

MySQL 5.7.6부터 MySQL에는 중국어, 일본어 및 한국어 단어 분할을 지원하는 ngram 전체 텍스트 파서가 내장되어 있습니다.

이 글에서 사용된 MySQL 버전은 5.7.25, InnoDB 데이터베이스 엔진입니다.

1. 전체 텍스트 인덱스가 있는 테이블을 만듭니다.

CREATE TABLE `tbl_article_content` (
  `id` bigint(40) NOT NULL AUTO_INCREMENT,
  `article_title` varchar(60) COMMENT '标题',
  `article_summary` varchar(120) COMMENT '摘要',
  `article_content` text NOT NULL COMMENT '内容',
  `article_id` bigint(40) NOT NULL COMMENT '对应文章ID',
  `create_date` datetime NOT NULL COMMENT '创建时间',
  `modified_date` datetime NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `artid` (`article_id`) USING BTREE,
  FULLTEXT KEY `article_content` (`article_content`) /*!50100 WITH PARSER `ngram` */ 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
로그인 후 복사

/*!50100 */ 버전 5.01.00 이상, 실행만 의미합니다.

WITH PARSER `ngram`은 지정된 단어 분할 엔진입니다.

2. 전체 텍스트 인덱스 추가

테이블 생성 시 전체 텍스트 인덱스가 추가되지 않은 경우 테이블 생성 후 추가할 수 있습니다.

create fulltext index article_content on tbl_article_content(article_content) WITH PARSER ngram;
로그인 후 복사

3. 테스트 데이터 추가

INSERT INTO `tbl_article_content` VALUES ('2', '文章标题', '文章摘要', '文章内容', '2', '2022-02-05 13:47:55', '2022-02-05 13:47:59');
로그인 후 복사

4. 쿼리 실행

mysql> select * FROM tbl_article_content222 WHERE MATCH(article_content) AGAINST('内容');
+----+---------------+-----------------+-----------------+------------+---------------------+---------------------+
| id | article_title | article_summary | article_content | article_id | create_date         | modified_date       |
+----+---------------+-----------------+-----------------+------------+---------------------+---------------------+
|  2 | 文章标题      | 文章摘要        | 文章内容        |          2 | 2022-02-05 13:47:55 | 2022-02-05 13:47:59 |
+----+---------------+-----------------+-----------------+------------+---------------------+---------------------+
1 row in set
로그인 후 복사

전체 텍스트 쿼리의 키워드는 MATCH와 AGAINST입니다.

5. Grammar

MATCH (col1,col2,...) AGAINST (expr [search_modifier])
search_modifier: { IN BOOLEAN MODE | WITH QUERY EXPANSION }
로그인 후 복사

예: SELECT * FROM tab_name WHERE MATCH ('열 이름 1, 열 이름 2...열 이름 n') AGAINST ('Word 1 Word 2 Word 3... Word m') ;

즉, MATCH는 일치시킬 열과 동일하고 AGAINST는 찾을 내용입니다.

위 내용은 mysql5.7.25의 전체 텍스트 검색 기능을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿