テーブルで構成されるプロパティ管理アプリケーションがあります。
tenants
landlords
units
properties
vendors-contacts
基本的に、検索するカテゴリを選択するのではなく、1つの検索フィールドですべてを検索する必要があります。これは許容できる解決策でしょうか(技術的には?)
5つのテーブルを検索することは、長期的には問題なく、サーバーを停止させることはありませんか?これを達成するための最良の方法は何ですか?
PostgreSQLの使用
テーブルで構成されるプロパティ管理アプリケーションがあります。
tenants
landlords
units
properties
vendors-contacts
基本的に、検索するカテゴリを選択するのではなく、1つの検索フィールドですべてを検索する必要があります。これは許容できる解決策でしょうか(技術的には?)
5つのテーブルを検索することは、長期的には問題なく、サーバーを停止させることはありませんか?これを達成するための最良の方法は何ですか?
PostgreSQLの使用
検索する列を1つに集約するテーブルの結合であるビューを作成してから、その集約された列を検索してみませんか?
あなたはこのようなことをすることができます:
select 'tenants:' + ltrim(str(t.Id)), <shared fields> from Tenants as t union
select 'landlords:' + ltrim(str(l.Id)), <shared fields> from Tenants as l union
...
これには、クライアントのクエリからいくつかのロジックを埋め込む必要があります。単一のフィールドで検索するには、探しているキーを作成する方法を知っている必要があります。
とはいえ、「タイプ」の値(家主、テナントなど)を含む別の列があり、タイプとIDの両方でフィルタリングする方が、計算コストが低くなるため(さらに最適化できるため)、おそらくより良いでしょう。 )。
これには、Luceneのような専用のフルテキストインデックス作成ツールを使用することをお勧めします。起動して実行する方がおそらく簡単であり、結果もより速く、より機能的です。Postgresの全文インデックスは、これに加えて構造化検索機能も必要な場合、または検索インデックスのトランザクション性が重要な場合に役立ちます。
これをデータベースに実装する場合は、代理キーを使用すると仮定すると、次のようなスキームが機能する可能性があります。
その後、次のように検索できます。
SELECT id, table_name, ts_rank_cd(body, query) AS rank
FROM search_view, to_tsquery('search&words') query
WHERE query @@ body
ORDER BY rank DESC
LIMIT 10;
あなたは元気であるはずです、そしてこれをする他の良い(簡単な)方法は本当にありません。ただし、検索しているフィールドが適切にインデックス付けされていることを確認してください。