全文搜索引擎的工作原理理论上很简单,关键技术就是“分词”,
- “索引库”:使用分词技术把“文档数据”按分词拆分,也就是一个文档拆分为多个分词(一条普通数据拆分为多个词的索引数据)。这个结构就形成了“索引库”,索引库存储的数据就叫索引(索引数据)(所以当普通数据发生变化的时候,与之所对应的索引也要变化,这里就涉及到自动实时更新索引,自动定时更新索引,还是手动更新索引,还有是增量更新索引,还是完全重建索引)。
- 用户输入搜索关键字后,首先需要处理的是这个关键字,需要把这个关键字拆分,拆分的技术还是使用分词拆分,把搜索关键字拆分成一个或者多个有意义的字词。
- 然后用这些字词去“索引库”中查询,此时的like其实是变成等于操作,然后返回结果。说白了全文搜索就是通过对内容分词把like变成等,当然数据的存储结构一般为非结构型数据文档结构。
文本数据:Lucene.Net只能对文本信息进行检索,所以非文本信息要么转换成为文本信息,要么你就死了这条心吧!
分词算法:将一句完整的话分解成若干词汇的算法 常见的一元分词(Lucene.Net内置就是一元分词,效率高,契合度低),二元分词,基于词库的分词算法(契合度高,效率低)...
切词:将一句完整的话,按分词算法切成若干词语
比如:"不是所有痞子都叫一毛" 这句话,如果根据一元分词算法则被切成: 不 是 所 有 痞 子 都 叫 一 毛
如果二元分词算法则切成: 不是 是所 所有 有痞 痞子 子都 都叫 叫一 一毛
如果基于词库的算法有可能:不是 所有 痞子 都叫 一毛 具体看词库
索引库:就是存储索引数据的库,简单的理解成一个提供了全文检索功能的数据库(把需要全文检索的数据存入索引库),见下图所示: