Java for Web 학습 노트 (1, 2, 2): 검색 (4) MySQL 전체 텍스트 인덱스 (위)
전체 텍스트 색인 은 색인 데이터 에 저 장 된 단어의 주파수 와 소재 기록 으로 빈도 가 높 을 수록 가중치 가 낮 으 며 일정한 계산 개 를 사용 하여 관련 성 평 점 (relevance score) 을 줍 니 다.MySQL 의 MyISAM 과 InnoDB 는 전체 텍스트 검색 을 지원 하지만 주의해 야 합 니 다.
SQL
MYSQL 공식 문서 참조
표 에 FULLTEXT KEY 설정
--
ALTER TABLE TicketComment ADD FULLTEXT INDEX TicketComment_Search (Body);
-- , , ,
ALTER TABLE Ticket ADD FULLTEXT INDEX Ticket_Search (Subject, Body);
검색 한 sql 문장
단어 검색
mysql> SELECT * FROM `TicketComment` WHERE MATCH(`Body`) AGAINST('test');
+-----------+----------+--------+-------------------+----------------------------+
| CommentId | TicketId | UserId | Body | DateCreated |
+-----------+----------+--------+-------------------+----------------------------+
| 2 | 1 | 4 | Comment Two: test | 2018-03-07 15:40:22.631000 |
| 12 | 1 | 4 | Test | 2018-03-07 15:50:35.068000 |
+-----------+----------+--------+-------------------+----------------------------+
2 rows in set (0.04 sec)
관련 값 보기
mysql> SELECT *, MATCH(`Body`) AGAINST('test') AS score From TicketComment;
+-----------+----------+--------+-------------------+----------------------------+--------------------+
| CommentId | TicketId | UserId | Body | DateCreated | score |
+-----------+----------+--------+-------------------+----------------------------+--------------------+
| 1 | 1 | 4 | my comment: Hello | 2018-03-07 15:40:00.719000 | 0 |
| 2 | 1 | 4 | Comment Two: test | 2018-03-07 15:40:22.631000 | 0.6055193543434143 |
| 3 | 1 | 4 | Comment Three : 3 | 2018-03-07 15:40:51.588000 | 0 |
| 4 | 1 | 4 | Comment Four: 4 | 2018-03-07 15:41:00.622000 | 0 |
| 5 | 1 | 4 | Comment Five: 5 | 2018-03-07 15:41:09.777000 | 0 |
| 6 | 1 | 4 | Comment Six: 6 | 2018-03-07 15:41:16.899000 | 0 |
| 7 | 1 | 4 | Comment Serven: 7 | 2018-03-07 15:41:28.665000 | 0 |
| 8 | 1 | 4 | Comment 8 | 2018-03-07 15:41:37.733000 | 0 |
| 9 | 1 | 4 | Comment 9 | 2018-03-07 15:41:43.515000 | 0 |
| 10 | 1 | 4 | Comment 10 | 2018-03-07 15:41:51.349000 | 0 |
| 11 | 1 | 4 | Comment 11 | 2018-03-07 15:42:01.263000 | 0 |
| 12 | 1 | 4 | Test | 2018-03-07 15:50:35.068000 | 0.6055193543434143 |
+-----------+----------+--------+-------------------+----------------------------+--------------------+
12 rows in set (0.01 sec)
SELECT *, MATCH(`Body`) AGAINST('test Hello') AS score From TicketComment;
# , , ( join)
SELECT *, (MATCH(`Body`) AGAINST('test')+ MATCH(`Body`) AGAINST('Hello')) AS score From TicketComment;
검색
mysql> select * from TicketComment where match(`Body`) against('Five Six');
+-----------+----------+--------+-----------------+----------------------------+
| CommentId | TicketId | UserId | Body | DateCreated |
+-----------+----------+--------+-----------------+----------------------------+
| 5 | 1 | 4 | Comment Five: 5 | 2018-03-07 15:41:09.777000 |
| 6 | 1 | 4 | Comment Six: 6 | 2018-03-07 15:41:16.899000 |
+-----------+----------+--------+-----------------+----------------------------+
2 rows in set (0.00 sec)
테스트 결과 숫자 는 stopwords 에 속 하고 my 도 stopwords 에 속 합 니 다.
연합 색인
mysql> select * from Ticket where Match(`subject`,`Body`) against('hello');
+----------+--------+---------+-----------------------------------+----------------------------+
| TicketId | UserId | Subject | Body | DateCreated |
+----------+--------+---------+-----------------------------------+----------------------------+
| 1 | 3 | hello | This is the frist ticket created! | 2018-01-15 16:09:13.016000 |
+----------+--------+---------+-----------------------------------+----------------------------+
1 row in set (0.01 sec)
boolean mode 사용 하기
우 리 는 against 에서 boolean mode 를 사용 하면 논리 적 조합 을 얻 을 수 있 습 니 다. 예 를 들 어 어떤 것 으로 시작 해 야 하 는 지, 아니면 관 계 를 포함 하지 않 아야 합 니 다.사용 가능 한 기 호 는 ft 를 조회 할 수 있 습 니 다.boolean_syntax, 그 중 ft 는 fulltext 의 줄 임 말 입 니 다.
mysql> SHOW VARIABLES LIKE 'ft%';
+--------------------------+----------------+
| Variable_name | Value |
+--------------------------+----------------+
| ft_boolean_syntax | + ->
select * from TicketComment where match(`Body`) against('Test -two' in boolean mode);
[참고]https://blog.csdn.net/u011734144/article/details/52817766 나의 Professional Java for Web Applications 관련 글
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.