2

フルテキスト インデックス テーブルがあり、複数の単語に一致する結果をクエリしようとしています。たとえば、インデックス付きの列 と を含むアドレス テーブルがaddress_textありzip_codeますcity

| ROW | address_text   | zip_code | city       |  
| 1   | Bourbon street | 1234     | Baltimore  |  
| 2   | Bourbon street | 1234     | New Orleans|

ここで、「Bourbon Baltimore」を検索したいのですが、最初の行だけが必要です。

私は次のことを試しました:

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

ただし、行はまったく返されません。

4

3 に答える 3

1

これは面白い質問だと思ったので、「CONTAINSTABLE」を読んでみることにしました。つまり、これはTransactSQL関数であることがわかります。ドキュメントを正しく読んでいると、contains_search_condition(つまり、'"Bourbon *" AND "Baltimore *"')が各列に個別に適用されているように見えます。したがって、目的の効果を得るには、おそらく2つのCONTAINSTABLE関数を結合する必要があります。

各CONTAINSTABLEは、各列でそれぞれを検索する場合を除いて、検索条件の1つを指定する必要があります。この場合、ANDはORになる必要があります。

于 2010-02-12T02:19:18.057 に答える
0

私はおそらく手遅れですが、同じ問題があります。私が持ってきた不自由で醜い解決策は次のとおりです。

テーブルに対してインデックス付きビューを定義します。1 つの列が主キー、2 番目の列が他のすべての対象列の連結、ビューのフルテキスト インデックスです。検索は、同じ構文 '"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
)

次に、ビューの全文索引

于 2011-04-07T19:55:10.790 に答える
0

FREETEXT コマンドが最も単純なオプションであり、必要に応じて CONTAINSTABLE と組み合わせて使用​​ される可能性があるようです。

SELECT *
FROM ADDRESSES
WHERE FREETEXT (*, 'Bourbon Baltimore' ) --no wildcards possible
于 2010-11-26T17:29:36.950 に答える