【问题标题】:Fulltext index "immediate" does not work with XPages in the web?全文索引“立即”不适用于网络中的 XPages?
【发布时间】:2014-12-03 09:37:00
【问题描述】:

我刚刚发现在 Domino 9.01 服务器上,当我通过 Web 中的 XPages 将文档添加到 NSF 时,Update.FulltextList 队列没有改变。 NSF 上的全文更新频率设置为“立即”,结果是当通过 XPages/Web 对文档进行更改时,全文索引永远不会自动更新。

在我通过 Notes 进行一些更改后,更新程序会在几秒钟后运行,并且 ft 索引正在更新。

是否有人遇到过类似的行为并有解决方案?

【问题讨论】:

  • 保存文档后调用 NotesDatabase.updateFTIndex() 是否有效?
  • 不,我只是在保存后调用了 database.updateFTIndex(true),但这并没有什么区别。 Update.FulltextList 还是 0。奇怪。
  • 很奇怪,我刚刚通过 ScanEZ 修改了其他 4 个文档,这意味着通过 Notes,并且两分钟后 Update.FulltextList 仍然为 0。 notes.ini 的 Update_Suppression_Time=1,所以索引器真的应该在最多 1 分钟后开始工作,不是吗?
  • 也许你可以试试 notes.ini 设置:FullTextMultiProcess=1。我找到的描述是这样的:允许chronos直接处理全文更新,而不必将全文索引请求添加到更新队列中。来源:lntoolbox.com/en/notesini-reference/bycategory/27-indexing/…希望这有助于...
  • 谢谢,但 Chronos 仅每小时运行一次,我需要更短的时间间隔 :)

标签: xpages lotus-domino


【解决方案1】:

在最近的几个服务器版本中,Somehting 已经使用全文立即进行了磨损。 可能有一些新的 INI 设置,但让管理员这样做是令人沮丧的, 所以最好的办法是使用 lotusscript 或 java 手动更新数据库。如果您提出很多请求,这似乎并不重要。

db.updateFTIndex(true)

如果你愿意,可以统计 iunindexed 文档的数量。

Dim session As New NotesSession
Dim db As NotesDatabase

Set db = session.CurrentDatabase



Print "Last Indexed:<br>" & db.LastFTIndexed & "<br>"

Dim ndtnow As New NotesDateTime(Now)
Dim ndtli As New NotesDateTime(db.LastFTIndexed )

Print Cdbl( ndtnow.TimeDifferenceDouble(ndtli)/60 ) & " minutes ago." & "<br><br>"

Dim T As New NotesDateTime("") 
Dim UnindexedCol As NotesDocumentCollection 


T.LSLocalTime = db.LastFTIndexed 
Set UnindexedCol = db.Search({@All}, T, 0) 
Print "Unindexed changed or new documents: " &  UnindexedCol.count & "<br><br>"

【讨论】:

  • 我假设这只是来自传统 Domino 背景的示例代码,因为它是 LotusScript。此代码不应在 XPages 上下文中“按原样”使用。首先转换为 SSJS 或 Java。但是,在对话框中包含这样的代码供系统管理员查看是一个好主意,而我之前在应用程序中也这样做过。
【解决方案2】:

我不得不说它确实适用于 XPages/Web。它看起来好像不起作用,因为更新 ft 索引需要长达 15 分钟,而 Update.FulltextList 统计数据似乎落后于当前情况很多。

15 分钟不是我对“立即”的解释,因为索引器在该服务器上根本没有负载,但这是另一回事。

【讨论】:

    【解决方案3】:

    我不是管理员,但这看起来很有用 http://www-01.ibm.com/support/knowledgecenter/SSKTMJ_9.0.1/admin/admn_indexertasksupdateandupdall_r.dita

    我注意到的一个部分是:

    当队列中记录视图或文件夹更改时,更新会等待 在更新所有视图索引之前大约 15 分钟 数据库,以便更新可以包括任何其他数据库更改 在 15 分钟的时间内完成。在更新视图索引后 数据库,然后它会更新所有具有全文搜索的数据库 索引设置为立即或每小时更新。

    值得注意的是,Indexer 任务会更新视图索引以及全文索引。您可以使用 notes.ini 中的 UPDATE_FULLTEXT_THREAD=1 将它们拆分到单独的线程中。使用最新版本的 Domino,您可以将全文索引移动到单独的驱动器上。我不确定这是否会提高更新性能。

    请不要使用 LotusScript 来更新 XPages 上下文中的全文索引。我怎么强调都不为过。另外,如果要更新全文索引,我建议使用参数false 而不是true。数据库在设置时应该始终有一个全文索引,但您可以轻松地检查它。

    在最近的项目中,我一直在使用 Jesse Gallagher 的霜冻框架。我注意到 BasicDocumentController 类在保存每个文档时更新了全文索引,代码如下:

    if (database.isFTIndexed()) {
        database.updateFTIndex(false);
    }
    

    【讨论】:

    • UPDATE_FULLTEXT_THREAD=1 已经到位。我在保存文档后添加了 database.updateFTIndex(false) 并将测试这是否会加快速度。尽管如此,这并不是真正的解决方案,因为我们正在讨论几个 NSF,其中 ft 索引应该尽快更新。在每个 NSF 中更改代码对我来说似乎是一个糟糕的解决方案。必须有办法缩短这 15 分钟的时间。我已经设置了 Update_Suppression_Time=1!
    • 请您解释一下:“请不要使用 LotusScript 来更新 XPages 上下文中的全文索引。”
    • 任何能够编写 LotusScript 的 XPages 开发人员都应该能够将其编写为 SSJS 或 Java。要将其用作 LotusScript,您需要运行一个代理。它不会执行得那么好,并且需要您与 notes.ini 或文档进行交互以将任何信息返回给用户(打印语句只会打印到服务器日志)。除非您有预先存在的 LotusScript 代码来保存或操作文档,否则我想不出任何理由调用 LotusScript 代理来执行此操作。
    【解决方案4】:

    自动“立即”全文更新的 15 分钟延迟在 Domino 管理员圈子中是众所周知的。您可以尝试为服务器创建程序文档。使用类似这样的命令:

    Updall -F [database_name]/[folder]
    

    -F 开关确保 Updall 只更新 FT 索引,而不是视图(一般来说,除非另外编程,否则它们会立即更新)。

    我们有许多服务器在工作时间每 5 分钟运行一次,这很有帮助。请记住,它会在繁忙的服务器上创建大量 I/O。

    【讨论】:

      猜你喜欢
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多