运行LS Agent创建FT索引时遇大小超限问题的解决方案咨询
解决Lotus Notes LS Agent创建FT索引失败的问题
首先,我完全理解你的困境:原本依赖数据库自动更新FT索引的功能失效,于是写了个夜间Agent来删除重建索引,但遇到超过12MB的文档时创建失败,还把旧索引删掉了,导致数据库暂时失去全文检索能力。下面分几个部分给你解决方案:
1. 进一步扩展FTG_INDEX_LIMIT是可行的
你已经通过SET CONFIG FTG_INDEX_LIMIT=12582912把限制从6MB调到了12MB,这个参数可以继续调大,单位是字节。比如如果要设置成25MB,就用:
SET CONFIG FTG_INDEX_LIMIT=26214400
注意两点:
- 修改后需要重启Domino服务器才能生效
- 更大的索引会占用更多磁盘空间和服务器资源,所以要根据服务器的硬件配置合理调整,比如先测试25MB或30MB的效果,不要一次性调到过大(比如100MB以上)
2. 优化Agent的容错逻辑,避免“删了旧索引却建不出新的”尴尬
现在你的Agent是先删旧索引再创建新的,一旦创建失败,数据库就没索引可用了。建议改成先尝试创建新索引,成功后再替换旧索引,用FTINDEX_REPLACE参数可以实现这个逻辑,修改后的代码如下:
Option Public Option Declare Dim s As NotesSession Dim ndb As NotesDatabase Sub Initialize Set s = New NotesSession Set ndb = s.CurrentDatabase Dim indexExists As Boolean indexExists = ndb.IsFTIndexed Print("Starting FT index rebuild process") ' 先尝试创建新索引,用REPLACE参数会保留旧索引直到新索引创建成功 On Error GoTo IndexCreationFailed Call ndb.CreateFTIndex(FTINDEX_ALL_BREAKS Or FTINDEX_REPLACE, True) Print("NEW INDEX CREATED SUCCESSFULLY") ' 如果旧索引存在,创建成功后再删除(可选,REPLACE会自动替换,但手动删除更彻底) If indexExists Then Call ndb.RemoveFTIndex() Print("OLD INDEX REMOVED SUCCESSFULLY") End If Exit Sub IndexCreationFailed: Print("ERROR CREATING FT INDEX: " & Err.Description) ' 出错时旧索引仍然存在(因为用了REPLACE),不用恢复,直接提示即可 If indexExists Then Print("FALLING BACK TO EXISTING FT INDEX") Else Print("NO EXISTING INDEX TO FALL BACK ON") End If Resume Next End Sub
这样即使创建失败,旧索引还能正常使用,不会影响业务。
3. 从根源处理超大文档
如果调大索引限制后还是遇到问题,或者不想占用过多服务器资源,建议处理那些超过大小限制的文档:
- 拆分超大文档:把大附件(比如PDF、压缩包)单独存成一个关联文档,主文档只保留链接和摘要信息,这样每个文档的大小都在索引限制内
- 排除无需索引的超大文档:如果某些超大文档不需要被全文检索,可以在数据库的FT索引设置里添加过滤条件(比如按表单类型、字段值排除),避免这些文档拖慢索引创建流程
4. 排查自动更新索引失效的原因
既然原本的自动更新功能没生效,不如彻底解决这个问题,这样就不用依赖手动Agent了:
- 检查数据库的FT索引设置:打开数据库属性→“全文索引”标签,确保“自动更新索引”已勾选,并且更新频率设置为“每日”
- 检查Domino服务器的FTIndex任务:在服务器控制台输入
show tasks,确认FTIndex任务在运行;如果没运行,输入load ftindex启动它 - 检查服务器日志:查看Domino的日志文件(log.nsf),有没有FTIndex相关的错误,比如权限不足、磁盘空间不够等问题
内容的提问来源于stack exchange,提问作者J.Doe
相关产品推荐
相关产品推荐

