最近在考虑站内搜索的技术方案时,首先考虑的是Embedding的方案而不是全文索引。
对于普通网站,数据量不算大,上全文检索很麻烦,需要专门的服务,第三方服务贵,自己搭需要额外服务器。
现在借助Embedding方案搭配向量数据,就可以简单很多,每次新增或者更新内容,同时生成向量数据存到数据库,搜索时,将搜索的关键词生成向量再去向量数据库搜索。
Embedding有不少开源方案,即使用OpenAI的成本也不高。
但我还没实际试过,不知道有没有已经用过这套方案的欢迎分享经验教训。
补充一下这分词和Embedding的区别 http://t.cn/A6NYugbE :
分词是将原文的文本分词,搜索的时候关键字和分词结果匹配就能搜到结果,如果文本匹配。
比如你有段文字:“老鼠爱大米”,会分词成“老鼠”、“爱”、“大米”、“爱大米”、“老鼠爱大米”等,你搜任意个分词例如“老鼠”,就能找到,但是你搜“🐭”“mouse”“老鼠爱食物”是搜不到的。
Embedding是将文本变成多维数字向量,按照文本之间的相似度搜索的,语言无关,不需要精确匹配关键字只要意思相近也能匹配到。
同样你有段文字:“老鼠爱大米”,会变成数字向量,例如
[.., 0.3, 0.5, ....],那么用户搜索“老鼠”,也先变成数字向量[.., 0.2, 0.3, ....],然后去向量数据库搜索,会搜索到“老鼠爱大米”这个项对应的匹配度最高,并且超过一定阈值,那就返回它作为匹配的结果。类似的,你搜“🐭”,也是先变成向量[.., 0.21, 0.3, ....]再搜索,这个向量和之前“老鼠”的向量只有细微的差别,所以你一样能得到跟“老鼠”或“mouse”差不多的搜索结果。
另外OpenAI介绍Embedding的文档写的非常好👍🏻
http://t.cn/A6NYmQXQ