2012-10-11 42 views
0

我尝试在ssjs中创建一个如下所示的搜索功能。notesdocumentcollection.ftsearch和带有特殊字符的搜索查询

notesdocumentcollection.ftsearch('"*' + searchword + '*"'); 

我有一个带有该字段值“Dr. Max Muster”的文档。 如果我搜索“博士”,我会得到一个结果。 如果我搜索“dr.max”,我没有得到结果。 如果我删除通配符并输入“dr.max”,我会得到一个结果。

我也tryed像这样

notesdocumentcollection.ftsearch('*' + searchword + '*'); 

有没有什么办法让与搜索查询通配符和特殊字符的结果呢?

P.S. 如果我在视图中的notesclient中尝试此操作,它将起作用。

编辑: 此查询。“马医生”我从服务器

IN FTGSearch option = 0x400089 
[12CC:000A-1A30] Query: dr. ma 
[12CC:000A-1A30] Engine Query: ("drma") 
[12CC:000A-1A30] OUT FTGSearch error = F22 
[12CC:000A-1A30] FTGSearch: found=0, returne 
[12CC:000A-1A30] IN FTGSearch option = 0x40008C 
[12CC:000A-1A30] Query: *"dr**ma"* 
[12CC:000A-1A30] Engine Query: ("*dr**ma*") 
[12CC:000A-1A30] OUT FTGSearch error = F22 
[12CC:000A-1A30] FTGSearch: found=0, returned=0, start=0, count=0, limit=0 
+0

是'英尺指数'更新,对不对?也许尝试重新创建它。但从什么 - 看,你的搜索请求是正确的。 –

+0

不,每一件事都会更新。正如我所说,我已经在notesclient中尝试了它,并且每件事情都有效。 – Pudelduscher

+0

我相信这里的基本问题是FTSearch是面向字的。即,索引器创建了每个文档中出现的单词的索引,并且要做到这一点,它需要定义“单词”是什么。在大多数语言中,一个单词被定义为一组连续字符,没有空格,也没有标点符号。即,“博士”是一个词。 “博士”不是一个字,因为“。”是标点符号,它不包含在索引中,因此您无法真正搜索它。 –

回答

0

为FTSearch文档说用引号括单词和短语,这个调试结果。所以,试试这个(你用引号括起来的搜索内容变量 - 而不是通配符星):

notesdocumentcollection.ftsearch('*"' + searchword + '"*'); 
+0

与此我得到了他相同的结果 – Pudelduscher

0

备注全文查询语法比迪斯尼时间份额公寓更好的保密(如果你是在迪斯尼你会得到漂移)。

官方语法指南是在这里:http://www-10.lotus.com/ldd/dominowiki.nsf/dx/full-text-syntax

什么帮助了我很多是采取searchsite.ntf和撕碎它。在FTSearch的所有概念中都以有效的方式实现(代码可以随时打败文档)。

希望首先帮助

+0

不幸的不是。我想我的搜索查询是正确的,因为它在笔记本客户端中工作。问题是为什么它不能在ssjs中工作。 – Pudelduscher

+0

在Notes客户机中工作,如:“LotusScript代码”或“键入搜索栏”。在后一种情况下,我的建议仍然存在:将searchsite.ntf分开。它具有所有更好的细节 – stwissel

1

OK了搜索引擎使用trigram系统。因此搜索2个字符将无法按预期工作。外卡可能会帮助,但不能保证它会得到一切。

因此,据我了解下一部分,如果您手动键入以下到注释客户端的全文搜索栏中,它的作品? (包括引号)

"*dr. max*" 

有一点要注意的Notes客户机是可以激活两个不同的搜索模式(在基本的喜好切换)。 Web查询和Notes查询。

默认情况下,网页查询已开启(IIRC),因此您可以像搜索标准网络搜索引擎一样进行搜索。

如果您已将其切换到Notes查询,或者搜索以全部大写字开头,则使用Notes之前使用过的语法。

因此,您可能会看到客户端与XPage之间的差异。

要测试这个,你可以按如下进行调试。在Domino服务器控制台上输入以下内容。

set config DEBUG_THREADID=1 
set config CONSOLE_LOG_ENABLED=1 
set config Debug_FTV_Search=1 

现在在笔记客户端和XPage中进行搜索。它将在Domino控制台上生成如下所示的内容(注意:我在重要行的开头添加了数字)。

IN FTGSearch 
[07FC:0048-0A94] option = 0x400219 
1. [07FC:0048-0A94] Query: ("*test*") 
2. [07FC:0048-0A94] Engine Query: ("*test*"%STEM) 
3. [07FC:0048-0A94] GTR query performed in 6 ms. 5 documents found 
4. [07FC:0048-0A94] 0 documents disualified by deletion 
5. [07FC:0048-0A94] 0 documents disqualified by ACL 
6. [07FC:0048-0A94] 0 documents disqualified by IDTable 
7. [07FC:0048-0A94] 0 documents disqualified by NIF 
8. [07FC:0048-0A94] Results marshalled in 3 ms. 5 documents left 
9. [07FC:0048-0A94] OUT FTGSearch error = 0 
[07FC:0048-0A94] FTGSearch: found=5, returned=5, start=0, count=0, limit=0 
[07FC:0048-0A94] Total search time 10 ms. 

每位的解释。

  1. 您发送给搜索引擎的字符串。在这种情况下,它是“测试”(带引号)
  2. 编译的搜索字符串。
  3. 需要多长时间和发现的文件总数。
  4. 由于被标记为已删除而被丢弃的总数。
  5. 由于您无权查看它们而被丢弃。
  6. 由于IDTable结果而丢弃的总数。
  7. 总数被丢弃,因为它们不会出现在您正在搜索的视图中。
  8. 花费的时间和剩余的文件。
  9. 如果发生任何错误。

因此,生成这两个搜索结果并发布它们,如果它不明显,为什么它提到它不起作用。

+0

是的,它可以在包含引号的笔记客户端中工作,如果我直接在视图中搜索。我会尝试拒绝的选择,让你现在发生什么。 – Pudelduscher

+0

这个查询“dr.ma”我得到了这个结果'IN FTGSearch option = 0x400089 [12CC:000A-1A30]查询:dr。发送查询:(“drma”) [12CC:000A-1A30] OUT FTGSearch error = F22 [12CC:000A-1A30] FTGSearch:found = 0,returne [12CC:000A -1A30] IN FTGSearch option = 0x40008C [12CC:000A-1A30]查询:*“dr ** ma”* [12CC:000A-1A30]引擎查询:(“* dr ** ma *”) [ 12CC:000A-1A30] OUT FTGSearch error = F22 [12CC:000A-1A30] FTGSearch:found = 0,returned = 0,start = 0,count = 0,limit = 0 – Pudelduscher

+0

所以。在笔记查询中,如果不在引号内,则无法搜索。还有一些其他的(但我永远不能找到技术,因为角色不能被搜索。:)。您的第二个查询\ *“dr ** ma”\ *是无效搜索。我不认为你可以用这种方式使用通配符(除了引用的文字),我必须检查。另外**将被视为引号内的文字。 –