2010-05-11 36 views
6

我想实现一个全文搜索的两列,我创建了一个视图:VendorName,ProductName。我有全文索引等工作,但实际的查询是什么导致我的一些问题。如何在sql server中的多个列上实现全文搜索?

我希望用户能够使用一些标准的搜索约定,或或不是和()分组的条款,这是很好,但我想在两列应用搜索,例如,如果我要运行一个查询如:

SELECT * FROM vw_Search 
WHERE CONTAINS((VendorName, ProductName), "Apple AND iTunes") 

这似乎是将查询到每一列单独即对于这两个术语检查供应商的名称,然后它惯于比赛,除非供应商被称为“苹果的iTunes”这两个术语检查产品名称。

如果我更改查询到:

SELECT * FROM vw_Search 
WHERE CONTAINS(VendorName, "Apple OR iTunes") 
AND CONTAINS(ProductName, "Apple OR iTunes") 

那么它的工作原理,但打破了其他的搜索查询(如搜索只是苹果),并从用户编写查询它并没有太大的意义,因为他们很可能会写入AND,但它需要一个OR才能工作。

我想要的是,如果在两个搜索词语之间有效,它会匹配所有名为apple的供应商,并且产品名称为itunes。

我应该在连接供应商和产品字段并在该新字段上执行第一个查询的视图中创建一个单独的字段,或者是否存在我遗漏的某些内容?

除此之外,谁会知道验证查询的现有方法?

回答

7

在较早版本的SQL Server中,查询匹配多个列。

但是,这被认为是bug

要跨多个列进行匹配,应该将它们连接在计算列中并在该列上创建一个索引。

+0

这似乎是不可能的与SQL Server视图 - 我错了吗? (不能在具有计算列的视图上创建非聚集索引) – 2015-11-01 06:02:29

+0

@RoyTinker:“计算列的视图”是什么意思? – Quassnoi 2015-11-01 19:35:28

+0

没关系,我的评论是不正确的(即_is_可能)。通过“查看计算列”我的意思是你上面说的,假设你的意思是创建一个视图。 – 2015-11-03 00:23:26