【问题标题】:How do you implement a fulltext search over multiple columns in sql server?如何在 sql server 中实现对多个列的全文搜索?
【发布时间】:2010-05-11 13:45:04
【问题描述】:

我正在尝试对我为其创建视图的两列执行全文搜索:供应商名称、产品名称。我有全文索引等工作,但实际查询是什么给我造成了一些问题。

我希望用户能够使用一些标准的搜索约定,AND OR NOT 和按 () 对术语进行分组,这很好,但我想在两列上都应用搜索,例如,如果我要运行查询如:

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

似乎将查询单独应用于每一列,即检查两个术语的供应商名称,然后检查两个术语的产品名称,除非供应商被称为“Apple iTunes”,否则它们将不匹配。

如果我将查询更改为:

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

然后它可以工作,但会破坏其他搜索查询(例如仅搜索苹果),并且从用户编写查询来看,它没有多大意义,因为他们可能写的是 AND,但它需要 OR 才能工作。

如果两者之间的搜索词是有效的,我想要返回它,这样它将匹配所有名为 apple 的供应商和产品名称 itunes。

我应该在视图中创建一个单独的字段来连接 Vendor 和 Product 字段并对该新字段执行第一个查询,还是我遗漏了什么?

除此之外,还有人知道验证查询的现有方法吗?

【问题讨论】:

    标签: sql-server full-text-search


    【解决方案1】:

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

    但是,这被认为是bug

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

    【讨论】:

    • 这对于 SQL Server 视图来说似乎是不可能的——我错了吗? (不能在具有计算列的视图上创建非聚集索引)
    • @RoyTinker:“具有计算列的视图”是什么意思?
    • 没关系,我的评论不正确(这可能的)。我所说的“具有计算列的视图”是指你上面所说的,假设你的意思是创建一个视图。
    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多