2012-10-11 41 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」\ *是無效搜索。我不認爲你可以用這種方式使用通配符(除了引用的文字),我必須檢查。另外**將被視爲引號內的文字。 –