使用数据库使用全文索引

    xiaoxiao2021-12-02  20

    数据库的模糊搜索 和 搜索引擎的功能 不是一个概念。数据库的模糊搜索是不能走索引的,也不好实现搜索词的逻辑(与或非)和范围搜索(在特定的域中)。 能走的只有前缀索引,但是这大大限制了功能。 不过使用数据库来实现搜索引擎也是一个思路,我有一个基于分布式数据库的全文索引的方案(代号x) 相比solr或elasticsearch的区别如下: 1 solr或elasticsearch是以文档进行均衡分片的,x是以单词(term)进行均衡分片的。 2 solr或elasticsearch要到所有的shard上去搜索,最后在replica上合并结果; x只需要到单词(term)所在的节点上进行搜索(只有一个节点),而且数据库有索引,速度非常快。 正是由于这个区别,搜索的速度得以提升,特别是在大数据量(机器多,分片多)的情况下, x方案有它独有的好处(精确定位term所在的节点), 代价就是在索引阶段需要把单词和文档都定位到某个具体的节点上。 数据库的表结构设计,由于是分布式数据库,所以表示根据某个字段分布到不同的数据库节点上的: 单词表 tab_term ,均衡字段是 term_id,字段意义: term_name 单词 field_name 单词的域 doc_id 单词所在的文档 term_freq 单词的频率 term_tfidf 单词的逆文档频率 score 单词的得分,可以使用逆文档频率代替 文档表 tab_doc , 均衡字段是doc_id, 字段意义: doc_id 文档id doc_type 文档类型 doc_content 文档内容本身 索引过程: 1 一个文档,经过分析(分词),得到每个单词的域 ,词频,词频-逆文档频率等信息 按照 term_name 作为均衡字段,将数据分割到tab_term的各个节点上 2 然后将文档进行hash,得到文档id,文档类型等,根据doc_id 将数据分散到tab_doc的各个节点上 搜索过程: 用户输入的关键词进行分析(分词) ,根据分词到 tab_term 中检索,得到每个 term 的 doc_id 列表; 然后对doc_id 进行排名,再去 tab_doc 返回原始文档
    转载请注明原文地址: https://ju.6miu.com/read-679609.html

    最新回复(0)