整个和搜索相关表的关系图如下:
从关系图上来看,只要在SearchWord表中找到指定关键字,通过SearchItemWord表,就能知道要查询的内容了。通过SearchItem表,就能确切知道是哪个模块了。
各表个字段的详细解释:
SearchCommonWords:★常用字/词组信息表(存储指定文化区域的常用字,在查询时输入这些字是不会返回结果的)
字段名 |
类型 |
含义 |
备注 |
CommonWordID |
Int |
常用字ID |
主键 |
CommonWord |
Nvarchar(255) |
常用字 |
如:where,about在英文中都属于常用字 |
Locale |
Nvarchar(10) |
所属文化区域 |
|
SearchIndexer:★索引Provider的程序集(这个表的数据好像没有用,在web.config中有设置)
字段名 |
类型 |
含义 |
备注 |
SearchIndexerID |
Int |
ID |
主键 |
SearchIndexerAssemblyQualifiedName |
Char(200) |
程序集 |
|
SearchItem:★模块内容搜索条目(将所有可能被搜索到的模块内容,通过定时调度的方式,将模块内容以搜索条目的形式保存,这样可加快搜索速度)
字段名 |
类型 |
含义 |
备注 |
SearchItemID |
Int |
搜索条目ID |
主键 |
Title |
Nvarchar(200) |
标题 |
|
Description |
Nvarchar(2000) |
描述 |
|
Author |
Int |
作者Id |
|
PubDate |
Datetime |
发布日期 |
|
ModuleId |
Int |
所属模块Id |
与模块信息表(Modules)关联 |
SearchKey |
Nvarchar(100) |
搜索关键字 |
|
Guid |
Varchar(200) |
|
好像是指示模块中的一条记录 |
HitCount |
Int |
点击次数 |
|
ImageFileId |
Int |
|
|
SearchItemWord:★搜索关键字索引信息表(搜索条目和搜索关键字之间的关系)
字段名 |
类型 |
含义 |
备注 |
SearchItemWordID |
Int |
搜索关键字索引ID |
主键 |
SearchItemID |
Int |
搜索条目Id |
关联模块内容搜索条目表(SearchItem) |
SearchWordsID |
Int |
搜索关键字Id |
关联搜索关键字信息表(SearchWordsID) |
Occurrences |
Int |
出现次数 |
关键字在指定搜索内容中的出现次数 |
SearchItemWordPosition:★搜索关键字在被搜索内容中出现的位置
字段名 |
类型 |
含义 |
备注 |
SearchItemWordPositionID |
Int |
ID |
主键 |
SearchItemWordID |
Int |
搜索关键字索引ID |
关联搜索关键字索引信息表(SearchItemWord) |
ContentPosition |
Int |
出现位置 |
|
SearchWord:★搜索关键字信息表(存储可供检索的关键字)
字段名 |
类型 |
含义 |
备注 |
SearchWordsID |
Int |
搜索关键字ID |
主键 |
Word |
Nvarchar(100) |
搜索关键字 |
|
IsCommon |
Bit |
是否是常用字 |
|
HitCount |
Int |
点击次数 |
|
一个可以改进的存储过程:
查看获取查询结果的存储过程GetSearchResults,我们会发现必须完全匹配查找关键字才能查出所需的内容。问题就在“sw.Word = @Word”这一句上,也就是说如果一个模块中包含“DotNetNuke”这个内容,那么他输入“Nuke”是不会查出来的。将这一句改成“sw.Word like '%' + @Word+'%'”就可以了(这是一个以效率换结果的方法)。具体修改方法见:http://www.cnblogs.com/esshs/archive/2005/08/12/213154.html
从数据表和所实现的功能上看,某些表的数据字段还没有用上,估计是DNN预留字段以便日后扩充。看完这篇文章的不知大家对DNN的查询功能是否有一个大概的了解。以后将继续针对如何通过各功能模块所实现的查询接口来填充SearchItem表;点击“查询”是如何工作的这些方面的问题来继续说明DNN搜索引擎原理。上文有任何讲解不正确的地方还请大家指出,以免误导他人。
==========================================
作者:二十四画生
转载请注明来源于博客园——二十四画生的Blog,并保留有原文链接。