notes的检索功能很强大,是notes很吸引用户的一个特点。
将Notes应用移植到Web上时,最简单的提供检索的方法是使用@command([viewshowsearchbar]);此命令在Notes端时,会显示搜索条,而在浏览器上,会显示一个搜索页面。R5中文版显示的搜索页面使用的html是位于domino\data\domino\icons里的 srchzhcn.htm和schbzhcn.htm。Domino引用这两个页面的样式和内容来生成URL搜索语句,可以直接修改这两个页面来定制搜索的界面。
上面的这种检索方法实际上是利用url命令SearchView来实现的,它有两个方面的不足:
1、不够灵活、用户输入较复杂的检索条件比较困难(需要自己输入searchview的参数query,例如要检索域名为yourfield中包含xxx的文档时,需要输入“field yourfield contains xxx”)。
2、不是即时的,因为全文索引不是即时更新的。
要解决上面的问题,可以自己在数据库中定制检索表单,用户可以在检索表单上制定复杂的检索条件,例如对上面的情况,由检索代理根据用户输入来生成 Searchview命令 http://yourhost/view?Searchview&query=field+yourfield+cont ais+xxx。
另外,可以在检索代理中加入以下代码,确保更新索引:
If(db.isftindexed)Then
If(db.lastftindexed<db.lastmodified)Then
Call db.updateftindex(False)
End If
Else
Call db.updateftindex(True)
End If
使用URL命令Searchview来进行检索也存在问题,那就是对中文的支持不好,由于URL命令中的中文传送给Web Server时编码变化,有些中文会检索不到。要解决这个问题,只好自己直接到Notes数据库中去检索了,可以使用notes的ftsearch方法,不过检索到的文档就需要自己来控制它们的显示了。例如:Dim ResultDoc As notesdocument
Dim targetview As notesview
Dim iNum As Integer
Set targetview=db.getview(searchview)
'searchstr是检索条件
iNum=targetview.ftsearch(searchstr)
If iNum=0 Then
Print "没有找到符合条件的文档"
Exit Sub
End If
Print "<b>找到"+Cstr(iNum)+"个符合条件的文档 </b><br>"
Print |<table>|
For i=1 To iNum
Set ResultDoc=targetview.getnthdocument(i)
Print |<tr>|
Print |<td>|+Cstr(i)+|</td>|
Print |<td><a href="/|+GetMyDBPath+"/"+searchview+"/"+ResultDoc.universalid+|">|
Print ResultDoc.biaoti(0)+|</a></td></tr>|
Next
Print |</table>|

