LotusScript FTSearch在日期字段上

时间:2014-10-08 09:42:01

标签: full-text-search lotusscript lotus

  • 我有一个包含多个文本字段和两个日期字段的表单,名为 - created和Deadline。
  • 我在数据库上有全文搜索索引

我正在尝试创建动态搜索。所以,在搜索表单上,我添加了所有字段,我想在搜索和动作搜索脚本中使用生成查询,然后在FTSearch函数中使用。一切都适用于文本字段,但使用日期字段 - 出了点问题。搜索结果不符合我的期望。

这是我的字段在视图中的表示方式:

created     Deadline    
08.10.2014  10.10.2014      
08.10.2014  14.10.2014      
06.10.2014  10.10.2014

这些是我的搜索查询的示例:

  • “[created]> = 04.10.2014”
  • “[created]> = 04.10.2014& [created]< = 07.10.2014”
  • “[created]> = 06.10.2014& [Deadline]> = 08.10.2014”
  • “[created]> = 03.10.2014& [created]< = 05.10.2014& [Deadline]> = 08.10.2014& [Deadline]< = 11.10.2014”

但正如我所说 - 返回的结果与搜索查询没什么相似之处。有什么不对?

实施例:   - 所有文件

 Created        Deadline            
 09.10.2014 10.10.2014

 03.10.2014 09.10.2014

 08.10.2014 10.10.2014

 08.10.2014 14.10.2014

 07.10.2014 09.10.2014

 06.10.2014 10.10.2014

 06.10.2014 10.10.2014

 03.10.2014 06.10.2014
  • 查询“[created]> = 07.10.2014”

结果 - 所有更改

  • 查询“[created]> = 07.10.2014& [created]< = 09.10.2014”

结果 - 0个文件

  • “[截止日期]> = 09.10.2014”

    • 结果 - 所有文件

这是我称之为并在视图中显示的方式:

    Set col = db.FTSearch(query, 0 )        
    Call col.putallinfolder("Search",True)
    Call ws.ViewRefresh 

可能是,事实造成的问题,创建的字段和Deadline存储日期没有时间?

4 个答案:

答案 0 :(得分:0)

假设日期存储为日期字段: 尝试替换句号“。”在您的日期格式中使用斜杠“/”。 FT搜索适用于日期值而不是文本表示。

例如

[created] >= 26/4/2014

请注意日期和月份数字(我是英文) - 您对服务器的地理位置的描述是格式是dd-mm-yyyy(欧洲)还是mm-dd-yyyy(美国格式)。

如果日期存储在文本字段中: 尝试围绕日期值引用,例如

[created] = "04.10.2014"

但是> =(或>,< etc)之类的比较不适用于文本字段FT搜索。它仅适用于日期和数字字段。

答案 1 :(得分:0)

可能是您第一次创建日期字段时,将其设置为文本。然后你将typ改为日期/时间。 这将在UNK表中将字段设置为文本,这将阻止您进行这些搜索。可以重建UNK表,但这可能很棘手。 您可以在此处阅读有关UNK表的更多信息:http://www-01.ibm.com/support/docview.wss?uid=swg21100238

答案 2 :(得分:0)

从我的观点来看,唯一的问题是您正在尝试使用内部Lotus Notes字段/ propery。

刚刚检查过搜索:

[_ CreationDate]< 07.10.2014和[_CreationDate]< 07/10/2014

两者都工作并返回相同的有效结果。我想这就是你要找的东西。

如果您的表单上没有名为“created”的真实字段(并且当然保存在文档中的值中)那么该公式将不会返回您期望的内容。

[_ CreationDate]几乎与公式@created一样。

P.S。在深度Lotus Notes迷宫中@created在某些情况下与doc.created不同,但那是不同的故事。

答案 3 :(得分:0)

好的,最后我找到了解决这个问题的方法。因此,FTSearch按设计工作,查询返回正确的文档集合。但问题在于 putallinfolder 功能,或者更好的说 - 与响应文档。每次莲花清除搜索视图,在结果集合中有子文件。所以,我添加了自定义函数ptInFolder(我想,我们也可以使用NotesDocument类的原生putInFolder方法):

Function putInFolder(doc As NotesDocument)
    On Error Goto catch
    Call doc.PutInFolder( "Search" )
catch:
    Exit Function
End Function

点击“搜索”按钮,我将遍历集合:

    Set col = db.FTSearch(query, 0 )    

    For i = 1 To col.Count

        Set doc = col.GetNthDocument( i )

        Call putInFolder(doc)           

    Next

现在一切正常。有点慢,但文件的数量并没有增加,所以这个解决方案对我有好处。