之前写了一篇关于Online Relevance Search的博文,然后又看到罗勇大神关于Full Text Index的博文:Dynamics CRM中一个查找字段引发的【血案】,于是准备写点关于Full Text Index Stopwords相关的介绍,也算是对Dynamics 365 Search方式相关的一个知识点记录。
关于如何开启Dynamics 365 Full Text Index,这个就不多加赘述了,基础功能在网上还是很容易找到的,在Enable Full Text Index的时候,CRM会有提示,大致意思是要等24小时才能生效。Maintenance Job如何修改执行时间,可以参考罗勇大神的文章:
update MSCRM_CONFIG.dbo.ScaleGroupOrganizationMaintenanceJobs set NextRunTime = ‘UTC时间‘ where OperationType = 15
注意RunTIme是UTC时间,可以大大减少Maintenance Job的等待时间,要不默认是会24小时执行一次。
当Full Text Index功能完全启用之后,我们当然会迫不及待地想要去尝试下新功能的效果,一般的搜索问题不大,但是有时候,你会发现,一些作为过滤条件的词语,就是搜索不到结果。例如,现在有一个account “Mr. To”
当用to作为查询条件的时候,是搜索不出这个account的
而导致这个问题的原因就是Stopwords in Stoplist。
当Full Text Index功能开启的时候,会有一个系统Stoplist作用于CRM Organization DB,作用于Full Text Index涉及到的Entity,也就是DB的Tables。
这个系统Stoplist来自于系统数据库Resource Database,一个在Management Studio上不可见的Database,但是在SQL安装目录下,可以找到它的数据库文件
这个数据库暴露出来的内容是ReadOnly的。
既然我们知道有Stoplist这个功能的存在,那么我们当然会想到,是不是可以创建自己的过滤词组来满足特定的业务需求呢?答案是肯定的。
1. 创建Stoplist
CRM Database -> Storage -> Full Text Stoplist -> New Full-Text Stoplist
在弹出界面,填上Stoplist的名字,然后选择Stoplist如何创建
这里的建议是“Create from the system Stoplist”,出于两方面的考虑:首先并不是所有的stopwords,业务逻辑上都不需要;其次是有些words是公共的,在使用的时候是有优化的。
创建完成之后,我们先来确认下word
2. Remove Stopword
右键Stoplist “demo”,点击Properties
选择“Delete stop word”,然后填写要去掉的word,以及语言
之后再执行下查询
3. 设置Stoplist作用于Account表
ALTER FULLTEXT INDEX ON dbo.Accountbase SET STOPLIST = demo;
4. Rebuild CRMFullTextCatalog
这里有可能遇到的问题是Rebuild是灰掉的,但是可以选择上一层“Full Text Catalogs”,右键Rebuild
5. 效果
IIS reset之后,查询效果
Stoplist 官方资料:Configure and Manage Stopwords and Stoplists for Full-Text Search