AKCMS 站内搜索功能设计草稿

计划为AKCMS增加一个站内搜索功能,想起什么写什么,写在纸上零零碎碎的不好保存,特整理出来。

以下为产品设计的草稿:

目标是什么不是什么:
1 不是与百度、谷歌一样的专业搜索引擎;定位于中小网站的站内搜索
2 不是完美搜索引擎的解决方案;是低成本基本可用的解决方案
3 不是分布式集群方案;是单台服务器,甚至是虚拟主机的方案
4 不是高性能高配置不差钱条件下的方案;是低性能低配置多限制(限制CPU时间、内存占用、执行时间)条件下的廉价方案
5 不期望像百度一样在0.001秒内找到查询结果;能在0.5秒内找到结果,甚至1秒内也能接受

其他目标:
1 索引尽可能的节省空间
2 结构简单,功能实用
3 高度可定制(索引的字段、栏目、分词类型、索引速度、搜索结果展现都可以由配置修改):可搜索的词基于自定义的一个词典、可搜索的内容的字段可配置(1完整索引2索引其中的分词3拆分后索引)、可搜索的分类可配置(可以只索引某个分类的内容)
4 多引擎支持
5 为避免超时,通过页面刷新增加索引,也可以提供命令行脚本
6 代码量尽量控制在10KB以下
7 支持搜索其他CMS的内容,可与其他CMS共存
8 支持创建增量索引和全量索引

实现细节:
一 索引为二进制格式,每条索引占用8字节,分为3部分:
1 存放内容ID,3字节(可存储最大ID是16777215)
2 存放关键词频次,1字节(最多次数255)
3 存放时间戳,4字节

每10000条索引结果使用78KB存储空间

二 用文件存储索引内容,用数据库存储索引键,更新索引会带来大量IO开销,容忍

三 更新索引分为两步:增加索引、索引排序

四 数据库存储的索引键有一个字段标识索引状态:0正常,1待排序

五 排序读取原索引,排序后,写入临时文件,完成后更新索引文件名,更新数据库的索引键状态为0

六 索引文件命名md5($keyword).'.aki'

 评论
  其实还是不知道站内搜索怎么样做?

  关键是否能把握好这个度,功能、性能、代码精简程度的平衡,不过如果做通用的可定制搜索我估计比较难把握,在这方面如果花费过多精力可能有点不值得。 如果可能,或者考虑另外起一个外挂搜索项目,用接口整合。

  那个索引功能怎么创建不了索引啊

  的发生方式

  很不错,但是你的CMS做了这么久了,但是没有什么名气,是否应该在宣传上做下功夫,我觉得多做几个模板去宣传效果肯定不错,希望你能执行
 发表评论
姓   名: