全文检索
语法
CREATE TABLE table_name(
column_list,
...,
FULLTEXT (column1,column2,..)
);
ALTER TABLE table_name
ADD FULLTEXT(column_name1, column_name2,…)
CREATE FULLTEXT INDEX index_name
ON table_name(idx_column_name,...)
select * from book
where
match(name, author, publisher) -- 想要匹配的column列表,需要和创建index时候的column列表一致:列名和个数要一样(顺序可以不一样),不然sql会报错。
against('北京日报') -- 关键字
倒排索引
原理
普通的模糊查询,从文档里找出关键字
而倒排索引相反,根据关键字找文档,是提前记录了关键字出现在哪些文档里,再进行查找
流程
1. 分词
将每个文档划分为词项(单词或短语),忽略常见的停用词(例如"the", "and", "over")。
文档1:quick, brown, fox
文档2:jumped, lazy, dog
文档3:fox, dog, played
2. 为每个词项建立索引: 对于每个词项,记录它在哪些文档中出现。
quick: 文档1
brown: 文档1
fox: 文档1, 文档3
jumped: 文档2
lazy: 文档2
dog: 文档2, 文档3
played: 文档3
3. 为了支持更高级的搜索和排序,可以记录词项在文档中的位置和权重。
quick: 文档1 (位置: 1, 权重: 1)
brown: 文档1 (位置: 2, 权重: 1)
fox: 文档1 (位置: 3, 权重: 1), 文档3 (位置: 1, 权重: 1)
jumped: 文档2 (位置: 1, 权重: 1)
lazy: 文档2 (位置: 2, 权重: 1)
dog: 文档2 (位置: 3, 权重: 1), 文档3 (位置: 2, 权重: 1)
played: 文档3 (位置: 3, 权重: 1)
4. 搜索:
当用户执行搜索查询时,查询的词项会在倒排索引中查找,返回包含这些词项的文档。例如,如果用户搜索 "brown fox",倒排索引会返回包含这两个词的文档,即文档1。