SQLiteの FTS(Full-Text Search) では、検索結果に「関連度スコア」を付与して並べ替えることができます。
これにより、曖昧な住所検索でも「どの候補がより一致度が高いか」を優先的に表示できるようになります。
FTSテーブル作成例
-- FTS5を利用した住所検索用テーブル
CREATE VIRTUAL TABLE PostalFTS USING fts5(
PostalCode,
Prefecture,
City,
Town,
content=''
);
-- 通常のPostalTableからデータをコピー
INSERT INTO PostalFTS(PostalCode, Prefecture, City, Town)
SELECT PostalCode, Prefecture, City, Town FROM PostalTable;
SQL検索SQL例(関連度スコア付き)
-- 「渋谷」というキーワードを含む住所を検索し、関連度順に並べ替え
SELECT PostalCode, Prefecture, City, Town, rank
FROM PostalFTS
WHERE PostalFTS MATCH '渋谷'
ORDER BY rank;
SQL💡 rank は FTS5 が内部的に計算する関連度スコア。
一致度が高いほどスコアが低く(より上位に)並びます。
VBAコード例(FTS+ランキング)
Sub QueryPostalSQLiteFTSRanking()
Dim conn As Object, rs As Object
Dim dbPath As String, keyword As String
dbPath = "C:\data\PostalCache.sqlite"
' SQLite接続(ODBCドライバ利用)
Set conn = CreateObject("ADODB.Connection")
conn.Open "Driver=SQLite3 ODBC Driver;Database=" & dbPath & ";"
' 検索キーワード(例:「渋谷」)
keyword = "渋谷"
' FTS検索+ランキング
Set rs = conn.Execute("SELECT PostalCode, Prefecture, City, Town, rank " & _
"FROM PostalFTS WHERE PostalFTS MATCH '" & keyword & "' ORDER BY rank")
' 結果をImmediate Windowに表示
Do Until rs.EOF
Debug.Print rs.Fields(0).Value & " → " & rs.Fields(1).Value & rs.Fields(2).Value & rs.Fields(3).Value & _
" (score=" & rs.Fields(4).Value & ")"
rs.MoveNext
Loop
rs.Close
conn.Close
End Sub
VB実行イメージ
検索キーワード:渋谷
| 郵便番号 | 都道府県 | 市区町村 | 町域 | スコア |
|---|---|---|---|---|
| 1500002 | 東京都 | 渋谷区 | 渋谷 | 1 |
| 1500003 | 東京都 | 渋谷区 | 道玄坂 | 5 |
| 1500004 | 東京都 | 渋谷区 | 鶯谷町 | 8 |
実務での応用
- 曖昧検索の精度向上 → 部分一致でも関連度の高い候補を優先表示
- 顧客データ補完 → 不完全な住所から最も可能性の高い候補を提示
- マーケティング分析 → 特定キーワードに関連する地域をランキング順に抽出
- ユーザー入力支援 → 郵便番号検索フォームで候補を関連度順に提示
💡 FTSのランキング機能を使えば、曖昧な住所検索でもユーザーに最適な候補を提示でき、顧客管理や配送業務の効率がさらに向上します。


