1

我们有一个网站,我们将在其中使用 Windows 搜索功能来允许用户搜索该网站的页面和文档。鉴于大多数用户已经熟悉 google 风格的搜索语法,我想让搜索尽可能直观。但是,使用 Windows 搜索似乎存在两个问题。

  1. 如果我使用FREETEXT()谓词,那么用户可以输入某些 google 样式的语法选项,例如用于精确短语匹配的双引号或使用减号排除某个单词。这些是我认为必要的功能。但是,FREETEXT()谓词似乎要求每个搜索词都出现在页面/文档中的某个位置,以便在结果中返回。

  2. 如果我使用CONTAINS()谓词,那么用户可以使用布尔运算符输入搜索词,他们可以使用该*字符执行通配符搜索。但是,所有搜索词必须由逻辑运算符之一连接或用双引号括起来。

我想要的是两者的结合。用户应该能够使用双引号搜索确切的短语,使用减号排除单词,但也可以让未包含在引号中的任何内容进行通配符匹配(例如,搜索 civ 将返回包含单词 Civil 或 Civility 或文明)。

我该如何实施呢?

4

1 回答 1

0

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

生成的 SQL 使用CONTAINS()谓词,但它CONTAINS()使用搜索词的不同组合(包括通配符)多次构建谓词。这允许用户使用双引号输入准确的短语,使用减号排除单词,并执行我在原始问题中提到的自动通配符匹配。

于 2013-02-21T14:41:10.563 回答