全文检索索引结果如何指定节点(包含子节点)
本文是基于对动易系统全文检索有一定了解的基础上讲解的,不了解动易系统全文检索的童鞋们可以先看看这:全文检索的使用方法
通常我们用全文检索来搜索,一般都是搜索全站的信息,有时候也会搜索指定类型的信息,如文章模型、图片模型、留言模型...建立这类的索引应该问题不大,其实都是同一句SQL加个条件或改一下ModelID的值。但最近项目中遇到要搜索指定节点下的所有信息,估计大家都会很自然地加上这么一个条件“PE_CommonModel.NodeID = 父节点ID”,结果发现什么都没搜出来(含子节点的情况下),需要改成“PE_CommonModel.NodeID in (父节点+子节点集)”,就这样,估计很多人都会跟我一样,立马写了这么一句SQL出来“PE_CommonModel.NodeID in (SELECT arrChildID FROM PE_Nodes WHERE NodeID = 1114)”。结果,操作数类型冲突:ntext 与 int 不兼容,如果是标签还好,直接放到子节点集的标签就完事了,但这里只能做SQL语句来实现。
其实这里需要用SplitID把arrChildID重新构建成一个数组(这个只支持MSSQL2005以后的版本),最后贴上能成功搜索包含子栏目信息的SQL语句:
SELECT * FROM PE_CommonModel Left JOIN PE_U_Article ON PE_CommonModel.GeneralID = PE_U_Article.ID WHERE PE_CommonModel.Status=99 AND PE_CommonModel.NodeID IN ( SELECT * FROM SplitID((SELECT arrChildID FROM PE_Nodes WHERE NodeID = 父节点ID), ',') ) AND PE_CommonModel.UpdateTime > ${{LastIndexTime}}
用户登录
还没有账号?
立即注册