2013-02-19 69 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()谓词。这允许用户使用双引号输入精确的短语,使用减号排除单词,并执行自动通配符匹配,正如我在原始问题中提到的那样。