Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用于全文索引中多列的AND语句_Sql_Indexing_Full Text Search_Containstable - Fatal编程技术网

Sql 用于全文索引中多列的AND语句

Sql 用于全文索引中多列的AND语句,sql,indexing,full-text-search,containstable,Sql,Indexing,Full Text Search,Containstable,我有一个全文索引表,并尝试查询匹配多个单词的结果。例如,我有一个地址表,其索引列为address\u text、zip\u code和city | ROW | address_text | zip_code | city | | 1 | Bourbon street | 1234 | Baltimore | | 2 | Bourbon street | 1234 | New Orleans| 现在我想搜索“波旁巴尔的摩”,只想要第一排 我尝试了

我有一个全文索引表,并尝试查询匹配多个单词的结果。例如,我有一个地址表,其索引列为
address\u text
zip\u code
city

| ROW | address_text   | zip_code | city       |  
| 1   | Bourbon street | 1234     | Baltimore  |  
| 2   | Bourbon street | 1234     | New Orleans|
现在我想搜索“波旁巴尔的摩”,只想要第一排

我尝试了以下方法:

SELECT FT_TBL.* FROM ADDRESSES AS FT_TBL 
INNER JOIN CONTAINSTABLE(ADDRESSES, *, '"Bourbon*" AND "Baltimore*"') AS KEY_TBL 
ON FT_TBL.address_id = KEY_TBL.[KEY] 
ORDER BY KEY_TBL.RANK, address_text

但是它根本不会返回任何行。

我发现这是一个有趣的问题,所以我决定继续阅读“CONTAINSTABLE”。因此,我看到它是一个Transact-SQL函数。如果我正确阅读了文档,那么看起来contains_search_条件(即“'Bourbon*”和“Baltimore*”)分别应用于每一列。因此,您可能需要将两个CONTAINSTABLE函数连接在一起以获得所需的效果


每个CONTAINSTABLE都需要指定一个搜索条件,除非您希望在每个列中搜索它们。在这种情况下,AND需要变成OR。

在我看来,FREETEXT命令可能是您最简单的选择,如果需要,可能与CONTAINSTABLE一起使用

SELECT *
FROM ADDRESSES
WHERE FREETEXT (*, 'Bourbon Baltimore' ) --no wildcards possible

我可能太迟了,但我也有同样的问题。我提出的蹩脚而丑陋的解决方案如下

在表上定义一个索引视图,其中一列是主键,第二列是所有其他感兴趣的列的串联,然后是视图上的全文索引。在视图上使用相同的语法“term1”和“term2”进行搜索

因此,在这种情况下,它将是

CREATE VIEW vFoo
WITH SCHEMABINDING
AS 
SELECT ROW, ISNULL(address_text,'') + ' ' 
+ ISNULL(cast(zip_code as varchar(xx)),'') + '' as SearchText
 FROM addresses

CREATE UNIQUE CLUSTERED INDEX uci_bar ON vFoo 
(
    Row ASC
)
然后是视图上的全文索引