Landscape トップページ | < 前の日 2005-01-28 2005-01-31 次の日 2005-02-01 >

Landscape - エンジニアのメモ 2005-01-31

MS SQL Server の CONTAINS による 全文検索


* MS SQL Server の CONTAINS による 全文検索

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [MS SQL Server]

MS SQL Server で CONTAINS を使った全文検索について調査。2003-06-13 にも似たようなことを調べてたけど、今回はちょっと本気。

- 要件

SQL Server で全文検索機能を使いたい。形態素解析でも N-gram でもいい。全角半角文字同一視、アラビア数字と漢数字の同一視ができればいい。対象は一文書約 4KB の日本語データで、数百から二千件程度。パフォーマンスは重視しない。簡単に作れることが肝要。この要件だと、CONTAINS 述語が使えそう。

- 事前準備

2003-06-13 でも書いたように、フルテキストインデックスをあらかじめ構築しておく必要がある。

- CONTAINS の文法

Transact-SQL リファレンス CONTAINS
http://www.microsoft.com/japan/msdn/library/ja/tsqlref/ts_ca ...

SELECT * FROM CONTAINSTABLE(document, *, '"QUERY"');

基本。
CONTAINS または CONTAINSTABLE 述語の引数としてクエリを渡す。
クエリ全体はシングルクオートで囲む。
クエリの中の単語はダブルクオートで囲む。

複数のクエリで AND や OR を作りたいときは、ダブルクオートをで囲んだ単語群を AND や OR で連結する。
SELECT * FROM CONTAINSTABLE(document, *, '"foo" AND "bar" AND "buzz"');

あとは prexi_term と細かな機能くらいしかリファレンスに載っていない。
<prefix_term>

指定のテキストで始まる単語または語句の照合を指定します。プレフィックス語句を二重引用符 ("") で囲み、後ろの二重引用符の前にアスタリスク (*) を挿入すると、アスタリスクの前に指定された文字列で始まるすべてのテキストが照合されます。この句は、CONTAINS (column, '"text*"') のように指定します。アスタリスクは、0 または 1 つ以上の文字に一致します。その単語または語句を語根とする文字もこれに含まれます。CONTAINS (column, 'text*') のように、テキストとアスタリスクが二重引用符で区切られていないと、フルテキスト検索でアスタリスクが文字と見なされ、text* に対する完全一致が検索されます。

<prefix_term> が語句のときは、語句に含まれるそれぞれの単語が独立したプレフィックスと見なされます。したがって、"local wine *" というプレフィックスを指定しているクエリでは、"local winery"、"locally wined and dined"などの行が一致します。

記号だけで検索したい場合とか、ダブルクオートを含む単語をどうエスケープしたらいいかなどについての記述が見つからない。そもそも、エスケープ対象の単語がどれなのかなどについても情報がない。さてどうする。

すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。