Filter Deamon
==============
Deamon的意识是守护进程. 在SharePoint 2007的搜索中, 它的名字是MSSDMN.exe, 这是一个用于被牺牲的进程, 其中寄存着protocol handler和filters的炮灰进程. 这些filter们都实现了一个标准接口IFilter. 之所以称它为炮灰进程, 是因为在SharePoint搜索的设计中认为这些MSSDMN.exe进程是会意外地终止的. 实际上我们同时可以有5个MSSDMN.exe进程, 一个是主要的, 剩下的是辅助的. 在注册表中有关于这些守护进程可以消耗多少内存的设置.
Protocol Handler
==============
Protocol handler是理解不同种类的被搜索对象的组件. 目标的类型决定与SharePoint 搜索之间沟通的内容信息的机制, 比如说sts2://, sts3://, http://, spsimport://, anchorqh://, 等等. 对exchange的公共文件夹, HTTP, WSS, SMB都有各自不同的protocol handler的.
Filter
==============
Filter组件能够理解具体类型的文档. 默认的SharePoint提供HTML, Office文档的filter.
MSSearch.exe和MSSDMN.exe之间的关系
==============
在这里稍微多说一点吧. MSSearch.exe和MSSDMN.exe之间是什么关系呢? MSSDMN.exe原本是从MSSearch.exe中分离出来的, 其核心是一种防御式的编程思想. 因为SharePoint站点上会放置很多不同种类的文档, 其中肯定有些类型的文档格式是微软产品所不理解的, 比如说PDF, rar. 这时候用户会使用第三方的Filter和protocol handler来解析这些种类的文档. 而这些Filter是否足够健壮, 以至于不会对Search有影响是微软所无法预计的. 所以, 把Filter的组件拿出来放在MSSDMN.exe这个进程中. 这样, 即使filter的过程崩溃了, 也不会对整个搜索服务造成很大的影响.
MSSDMN.exe和MSSearch.exe之间通过共享内存来进行通信(shared memory). 在处理文档的时候, filter daemon会提供所谓的chunk给MSSearch.exe进程.
在MSSearch.exe进程中有Gatherer Project. Gatherer Project被认为是处理chunk的入口. 在Gatherer Project中, chunk会被提供给各种各样的plug-in, 这些plug-in会处理提供给它的chunk.
在MSSearch.exe进程中有个线程池, 对每一个chunk的处理都有一个filtering thread来handle. 任意一个类型的文档都可以在这个层次被任意的filtering thread处理, 因为到这一步, 文档类型的差异已经不存在了.