我们有一个网站,我们将使用Windows搜索功能允许用户搜索网站的页面和文档。鉴于大多数用户已经熟悉谷歌式搜索语法,我希望尽可能直观地进行搜索。但是,使用Windows Search似乎存在两个问题。
如果我使用FREETEXT()
谓词,则用户可以输入某些谷歌式语法选项,例如用于精确词组匹配的双引号或使用减号来排除某个词。这些是我认为必要的功能。但是,FREETEXT()
谓词似乎要求每个搜索词都出现在页面/文档中的某个位置,以便在结果中返回。
如果我使用CONTAINS()
谓词,则用户可以使用布尔运算符输入搜索词,并且可以使用*
字符执行通配符搜索。但是,所有搜索项必须由其中一个逻辑运算符连接或用双引号括起来。
我想要的是两者的结合。用户应该能够使用双引号搜索确切的短语,使用减号排除单词,但是没有用引号括起来的任何内容都要进行通配符匹配(例如,搜索civ会返回包含单词或文明或文明)。
我怎样才能实现这个目标?
答案 0 :(得分: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()
谓词。这允许用户使用双引号输入精确短语,使用减号排除单词,并执行原始问题中提到的自动通配符匹配。