我有大约50个莲花笔记数据库,我需要根据相当复杂的查询搜索(包括RTF和附件)(例如:如果客户= a或b或c或d或e ...或z& ; product = x或y)然后==匹配;和标签(例如标签=找到或未找到)
但是,我不确定最好的方法,并想检查三个选项。
使用Lotus' '在视图中搜索'索引后应该搜索所有数据库 - 但我不确定它是否会接受一个冗长,复杂的搜索查询
在Lotus SCRIPT中编写代理以基本上执行1中的搜索。但这可能是让它接受复杂查询的一种方式
使用外部软件(例如X1 Professional Search)在Lotus Notes之外搜索(但是如果我在Windows资源管理器中识别它们,我不确定是否能够标记文件)。
< / LI> 醇>编辑:我的想法是:
Sub Initialise
Dim session as New NotesSession
Dim db as NotesDatabase
Dim dc as NotesDocumentCollection
Dim doc as NotesDocument
Dim searcy_query$
'On current database
Set db = session.CurrentDatabase
'Force index of database
Call db.UpdateFTIndex(True)
'Construct QUERY
search_query = "(Customer1|Customer2) & (Product1|Product2)"
'Search
Set dc = db.FTSearch(query, 0)
If dc.Count=0 Then
Msgbox "No matches!"
Exit Sub
End If
‘Tag the matched documents with “Flag”
Call dc.StampAll("Flag","Active)")
End Sub
但是,我不确定这是否会返回所有匹配项以及@TRIM和@UPPER(将它们放入查询的位置,因为我将搜索所有字段和RTF而不是特定字段)
答案 0 :(得分:2)
首先:一次搜索多个数据库当然可以通过搜索每个单独的数据库“手动”完成,收集结果并找到一种方式以“某种方式”呈现文档(这不会很容易,由于来自不同数据库的文档无法在“一个”视图中显示 - 您需要使用“影子文档”或网络方法(例如XPage))
但是:Lotus Notes有一个内置函数来执行此操作,它被称为“域索引器”。您可以在管理帮助中阅读有关如何设置“域索引”in this IBM Link的详细信息。
使用域索引进行多数据库搜索的示例可以在catalog.nsf中找到“DomainQuery”形式。
据我所知,搜索字符串没有限制,因此您可以使用此技术进行非常复杂的搜索,并为您提供所有匹配。
如果您搜索LotusScript解决方案,请查看NotesDatabase.ftdomainsearch的文档以获取此类示例代码(取自开发人员帮助):
以下代码放置在目录编目数据库中的搜索表单上的按钮中时,在目录中搜索指定的查询字符串,并返回所有结果。
Sub Click(Source As Button)
Dim s As New NotesSession
Dim db As NotesDatabase
Dim w As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc as NotesDocument
Dim quer As String
Dim srdoc as NotesDocument
Set db=s.CurrentDatabase
Set uidoc = w.currentdocument
uidoc.refresh
Set doc=uidoc.Document
quer=doc.query(0)
On Error Resume Next
If db.isopen Then
If Err <> 0 Then
Messagebox STR_DBOPEN_ERROR, 0 , STR_ERROR
Err = 0
Exit Sub
End If
Set srdoc = db.ftdomainsearch(quer, 0)
If Err <> 0 Then
Messagebox STR_NDF , 0 , STR_LOTUS_NOTES
Err=0
Exit Sub
End If
srdoc.Form="SearchResults"
Call w.EditDocument(False, srdoc, True)
End If
End Sub
答案 1 :(得分:1)
如果你还打算搜索Rich Text,那么简单的方法就是全文搜索,你明白了!
您的查询语法为:
generic_text or ([_CreationDate]<07.10.2014 and ([CustomerFieldName]="Smith" or [CustomerFieldName]="Wesson"))
为了形成结果,我建议查看:AppendDocLink,例如:
Dim session As New NotesSession
Dim db As New NotesDatabase("", "resu.nsf")
Dim newDoc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Set newDoc = New NotesDocument( db )
Set rtitem = New NotesRichTextItem( newDoc, "Body" )
'you have to loop on your 50 DBs
'Search =>from your code
Set dc = db.FTSearch(query, 0)
while not doc is nothing
Call rtitem.AppendDocLink( doc, db.Title )
Call rtitem.AddTab( 1 )
Call rtitem.AppendText( doc.FieldImportantInResult( 0 ) )
Call rtitem.AddNewLine( 1 )
Set doc = dc.GetNextDocument( doc )
Wend
newDoc.save true, true
'this part is not to add it you plane to run your search in background
Dim w As New NotesUIWorkspace
Call w.EditDocument(False, newDoc, True)