【问题标题】:LotusScript FTSearch on date fields日期字段上的 LotusScript FTSearch
【发布时间】:2014-11-25 17:37:38
【问题描述】:
  • 我有一个包含多个文本字段和两个日期字段的表单,分别称为 - created 和 Deadline。
  • 我在数据库上有全文搜索索引

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

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

created     Deadline    
08.10.2014  10.10.2014      
08.10.2014  14.10.2014      
06.10.2014  10.10.2014

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

  • “[创建] >= 04.10.2014”
  • "[已创建] >= 04.10.2014 & [已创建]
  • "[已创建] >= 06.10.2014 & [截止日期] >= 08.10.2014"
  • "[创建] >= 03.10.2014 & [创建] = 08.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
  • 查询“[已创建] >= 07.10.2014”

结果 - 所有变化

  • 查询“[已创建] >= 07.10.2014 & [已创建]

结果 - 0 个文档

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

    • 结果 - 所有文档

这就是我如何称呼它并在视图中显示:

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

会不会是由事实造成的问题,即字段创建和截止日期存储没有时间?

【问题讨论】:

    标签: full-text-search lotusscript lotus


    【解决方案1】:

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

    例如

    [created] >= 26/4/2014
    

    请注意日期和月份数字(我是英国人) - 您取决于服务器的地理设置格式是 dd-mm-yyyy(欧洲)还是 mm-dd-yyyy(美国格式)。

    如果日期存储在文本字段中: 尝试在日期值周围加上引号,例如

    [created] = "04.10.2014"
    

    但是,像 >=(或 >、

    【讨论】:

    • 我试图改变格式 - 它没有帮助。此外 - 日期存储在日期/时间字段中,文档表单和搜索表单中的字段表示格式相同。
    • 你能发布一个它不工作的例子吗?即您的查询是什么,结果中的字段是什么?这是在 Notes 客户端搜索栏中运行的,还是过去的一些 lotusscript,或者通过 Web 浏览器搜索 URL 运行?
    • 我在第一篇文章中添加了示例
    • 好的,我刚刚通过 Notes 客户端在我的电子邮件数据库上尝试过这个 - “[delivereddate] >= 7.10.2014 AND [delivereddate]
    • 是的。我直接在笔记客户端中尝试了它们。不知道为什么它不起作用
    【解决方案2】:

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

    【讨论】:

    • 我知道 UNK。我深入探讨了这个话题。我尝试了与 UNK 相关的所有操作:删除索引、重新创建、在本地使用创建副本和副本删除,然后再次复制到服务器并重新创建索引。从头开始使用的字段如下所示:created 是计算日期/时间字段,其值为 @Created 和 Deadline - 具有日历样式的可编辑日期/时间字段,用户在其中选择了正确的日期。所以,这就是为什么我对此感到如此困惑。
    【解决方案3】:

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

    刚刚检查了搜索:

    [_CreationDate]

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

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

    [_CreationDate] 几乎与公式@created 一样工作。

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

    【讨论】:

    • 我用公式@created 创建了字段。但问题不仅在于创建的字段,还在于截止日期。
    • 您是否确保 ftsearch 在没有您的代码的情况下也能正常工作。我的意思是它从视图中起作用吗?这是示例截图:i.imgur.com/f0sX2of.png
    【解决方案4】:

    好的,我终于找到了解决这个问题的方法。因此,FTSearch 按设计工作,查询返回正确的文档集合。但问题出在 putallinfolder 函数上,或者,更好的说法是 - 与响应文档有关。 Lotus 每次清除搜索视图时,结果集合中都有包含子文档的文档。所以,我添加了自定义函数 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
    

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

    【讨论】:

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