๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐ŸŒฎ ๐Ÿ’ฌ
๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป/database

[MySQL] FULLTEXT ์ธ๋ฑ์Šค ๊ฒ€์ƒ‰ ๊ธ€์ž์ˆ˜ ์ œํ•œ

by ๋ฐ”์ฟ„๋ฆฌ 2025. 5. 28.

 

๊ฐœ์š”

 

article์ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์—์„œ ํŠน์ • ner๋ฅผ ํฌํ•จํ•œ ๊ธฐ์‚ฌ๋“ค์„ select ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑ ์ค‘์— ์žˆ์—ˆ๋‹ค.

 

โœ… ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ ๋ฐœ์ƒ

2๊ธ€์ž๋Š” ๊ฒ€์ƒ‰์ด ์•ˆ๋˜๊ณ , 3๊ธ€์ž๋ถ€ํ„ฐ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ

 

 

1๏ธโƒฃ ner ํ‚ค์›Œ๋“œ ์ค‘ "์‚ผ์„ฑ"์„ ํฌํ•จํ•œ ๊ธฐ์‚ฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” query

SELECT * FROM articles WHERE MATCH(ner_text) AGAINST('+์‚ผ์„ฑ' IN BOOLEAN MODE);

→ ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ ์•ˆ๋จ

 

2๏ธโƒฃ ์‚ผ์„ฑ์ „์ž๋ฅผ ํฌํ•จํ•œ ๊ธฐ์‚ฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” query

SELECT * FROM articles WHERE MATCH(ner_text) AGAINST('+์‚ผ์„ฑ์ „์ž' IN BOOLEAN MODE);

→ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ

 

ํ™•์ธ

MySQL FULLTEXT ์ธ๋ฑ์Šค์—์„œ 2๊ธ€์ž ์ด์ƒ์ด ๊ฒ€์ƒ‰์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

SHOW VARIABLES LIKE 'innodb_ft_min_token_size';
>> 3
  • 3๊ธ€์ž ์ด์ƒ๋ถ€ํ„ฐ ์ธ๋ฑ์Šค ๋“ฑ๋กํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.
  • 2๊ธ€์ž ๋‹จ์–ด๋Š” ์ธ๋ฑ์Šค ํฌํ•จ X

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 1๏ธโƒฃ : innodb_ft_min_token_size ๊ฐ’ ์กฐ์ •

1. MySQL ์„ค์ • ํŒŒ์ผ (์˜ˆ: my.cnf ๋˜๋Š” my.ini) ์ˆ˜์ •

[mysqld]
innodb_ft_min_token_size=2

 

2. MySQL ์žฌ์‹œ์ž‘

3. FULLTEXT ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ

ALTER TABLE articles DROP INDEX idx_ner_text;
ALTER TABLE articles ADD FULLTEXT INDEX idx_ner_text (ner_text);

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 2๏ธโƒฃ : WITH PARSER ngram (Innodb ์ „์šฉ)

ALTER TABLE articles
  ADD FULLTEXT INDEX idx_ner_text_ngram (ner_text)
  WITH PARSER ngram;
  • ngram ํŒŒ์„œ๋Š” ํ•œ๊ธ€๋„ ๊ธ€์ž ๋‹จ์œ„๋กœ ์ชผ๊ฐœ๊ธฐ ๋•Œ๋ฌธ์— 2๊ธ€์ž ๋‹จ์–ด, ์‹ฌ์ง€์–ด 1๊ธ€์ž ๋‹จ์–ด๋„ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ

 

์ง„ํ–‰

mysql config๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค๋Š” ์ƒˆ๋กœ์šด ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒŒ ๋‚ซ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ๋ฐฉ๋ฒ• 2๏ธโƒฃ๋กœ ์ง„ํ–‰

 

- ์ธ๋ฑ์Šค ์ƒ์„ฑ

ALTER TABLE articles DROP INDEX idx_ner_text;
ALTER TABLE articles
  ADD FULLTEXT INDEX idx_ner_text (ner_text)
  WITH PARSER ngram;

 

- ์กฐํšŒ

SELECT * FROM articles WHERE MATCH(ner_text) AGAINST('+์‚ผ์„ฑ' IN BOOLEAN MODE);

 

 

โžก๏ธ 2๊ธ€์ž๋„ ์ž˜ ์กฐํšŒ๋œ๋‹ค!