全文检索索引结果如何指定节点(包含子节点)

作者:佚名 来源:网络 点击数: 发布时间:2016年03月03日

  本文是基于对动易系统全文检索有一定了解的基础上讲解的,不了解动易系统全文检索的童鞋们可以先看看这:全文检索的使用方法

  通常我们用全文检索来搜索,一般都是搜索全站的信息,有时候也会搜索指定类型的信息,如文章模型、图片模型、留言模型...建立这类的索引应该问题不大,其实都是同一句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}}