2013-02-19 85 views
1

我們有一個網站,我們將使用Windows搜索功能來允許用戶搜索網站的頁面和文檔。鑑於大多數用戶已經熟悉谷歌風格的搜索語法,我希望儘可能直觀地進行搜索。但是,使用Windows Search似乎存在兩個問題。構建Windows搜索查詢

  1. 如果我使用FREETEXT()謂語,然後用戶可以輸入一定的谷歌風格的語法選項,如精確短語匹配雙引號或使用減號來排除某個詞。這些是我認爲必要的功能。然而,FREETEXT()謂詞似乎要求每個搜索詞都出現在頁面/文檔的某處,以便在結果中返回它。

  2. 如果我使用CONTAINS()謂語,然後用戶就可以使用布爾運算符輸入搜索條件,他們可以使用*字符執行通配符搜索。但是,所有搜索條件必須由邏輯運算符之一連接或用雙引號括起來。

我想要的是兩者的結合。用戶應該能夠使用雙引號標記來搜索確切的短語,使用減號來排除單詞,但是也可以使用不帶引號的內容進行通配符匹配(例如,搜索civ將返回包含civil或civility詞語的文檔或文明)。

我怎麼能去實現這個?

回答

0

我按照http://www.codeproject.com/Articles/21142/How-to-Use-Windows-Vista-Search-API-from-a-WPF-App的一些說明創建了用於.NET的Interop.SearchAPI.dll程序集。然後我使用ISearchQueryHelper.GenerateSQLFromUserQuery()方法來構建SQL命令。

生成的SQL使用CONTAINS()謂詞,但它使用搜索項的不同組合(包括通配符)多次構建CONTAINS()謂詞。這允許用戶使用雙引號輸入精確的短語,使用減號排除單詞,並執行自動通配符匹配,正如我在原始問題中提到的那樣。