有一个奇怪的。我正在做一个NotesDatabase.ftsearch,当它返回一个时,它返回3个doc。此外,其中两个文档为空/ null。
我的查询很简单:field contact =“John Smith”field form =“Contact”
当我在Notes客户端的视图搜索中发出查询时,我得到了我期望的一个文档。 Lotus Script,tho,正在返回3个文档(我正在遍历调试器),前两个文件中没有任何值的字段(事实上,“Items”为空),但它们被返回来自ftsearch的DocCollection作为合法命中。此时我的解决方案是检查哪个doc具有非空“Items”字段。关于可能导致这种情况的任何想法,想法?
感谢 CLEM
以下是使用以下内容进行的调试调试:SET CONFIG Debug_FTV_Search=1
[04FC:0092-1274] Query: FIELD firstname = "Joe" AND FIELD lastname ="Customer" and field form ="Contact"
[04FC:0092-1274] Engine Query: ("Joe"@F215 * "Customer"@F216 * "Contact"@F206)
[04FC:0092-1274] GTR query performed in 68 ms. 3 documents found
[04FC:0092-1274] 0 documents disualified by deletion
[04FC:0092-1274] 0 documents disqualified by ACL
[04FC:0092-1274] 0 documents disqualified by IDTable
[04FC:0092-1274] 0 documents disqualified by NIF
[04FC:0092-1274] Results marshalled in 1 ms. 3 documents left
[04FC:0092-1274] OUT FTGSearch error = 0
[04FC:0092-1274] FTGSearch: found=3, returned=3, start=0, count=0, limit=0
[04FC:0092-1274] Total search time 69 ms.
[04FC:0092-135C] IN FTGCloseSearch
[04FC:0092-1290] IN FTGSearch
答案 0 :(得分:3)
我在这里有一点点,但我认为这些是您(或您的代理人,如果您的代码正在运行)无法访问的文档。让您的代码检查那些文档的NotesDocument.IsValid()。它可能会以虚假的方式回归。
如果我是对的,只需将该检查添加到您的代码中即可清除这些文档。或者,如果您对有无权访问的文档感到惊讶,请为自己提供完全访问管理员权限并重新运行代码。这应该可以获得这些文档,这样您就可以查看Reader和/或Author字段,找出您没有看到它们的原因。
答案 1 :(得分:1)
我发现,有时我会在数据库中称之为“奇怪的文档”。 您可以使用视图(getnextdocument),使用ftsearch或其他各种方式获取它们。
对于我发现的观点,这些奇怪的文档大多来自过时的视图索引。对于ftsearches也是如此。 在那种情况下,重建视图索引或ft索引通常会使文档消失。但是:通常你不想在每次运行像这样的代理之前重建视图索引。
这就是为什么我的所有代码都通过任何类型的文档首先检查三件事:doc.isdeleted(有时返回删除存根),doc.isvalid AND isempty(doc.items)。在一个数据库中,我甚至不得不将isempty包装在错误处理程序中,因为此调用导致错误。
我发现只省略其中一项检查可能意味着仍会处理奇怪的文档。 因为对于不同的数据库中的不同客户来说,这经常发生在我身上,所以我写了一个小函数IsDocValid,我总是在通过集合时调用它。
Function IsDocValid( doc as NotesDocument ) as Boolean
Dim blnValid as Boolean
blnValid = False
On Error Goto ErrorHandler
If not doc.IsDeleted then
If doc.IsValid then
If not isempty( doc.Items ) then
blnValid = True
End If
End If
End If
EndFunction:
IsDocValid = blnValid
ErrorHandler:
Resume EndFunction
End Function
在我的循环中,我使用它:
Set doc = .....
If IsDocValid( doc ) then
'Do the processing
End If