バックグラウンド:
さまざまな種類のイベント (コンサート、サッカーの試合、チャリティー コレクションなど) を表す SQL データベースで、それぞれにイベント関連のデータ (コンサート - アーティスト名、試合 - ホスト/ビジター チーム) が含まれています。これらのイベントはevent
すべて、それらすべてに関連するデータ (名前、説明、場所、開始日/終了日) を含む 1 つの一般テーブルから継承されます。継承は、 HibernateまたはDoctrineで知られるサブクラスごとのテーブル モデルを使用して実装されます。データベースには、 および テーブルで使用されるテーブル ( 、 、 ) および ( 、 、 ) も格納されartists
ますid
( name
FKbirth_date
をfootball_teams
介しid
てname
) 。country
coach_name
event_concerts
event_football_matches
問題:
{name: "manchester", startDate: "01.01.2012 - 01.02.2012"}
いくつかの基準 (または{location: "london", description: "artists +metallica -bieber"}
) を指定して、基準を満たすすべてのイベントとartists
/football_teams
テーブルからの結果を返す検索エンジンを作成します。
これらのイベントの一部のプロパティには、全文検索方法で検索する必要がある大きなテキストが含まれています。
例:
次の検索条件が与えられた場合:
{ location: "london", startDate: "05.11.2012 - 07.11.2012" }
検索エンジンは次を返す必要があります。
- (サッカー イベント) アーセナル対マンチェスター ユナイテッドの試合、エミレーツ スタジアム、ロンドン、2012 年 6 月 11 日
- (コンサート イベント) メタリカ コンサート、Some-Fancy-Location、05.11.2012
- (サッカー チーム/イベントではありません) アーセナル、設立: 1886 年、リーグ: プレミア リーグ
- (サッカーチーム/イベントではありません) チェルシー、設立: 1905年、リーグ: プレミアリーグ
- (フェスティバル イベント) ロンドンのハロウィーン、2012 年 7 月 11 日
- (ダンス イベント) サドラーズ ウェルズの眠れる森の美女、£45、2012 年 7 月 11 日
- (ミュージシャン、イベントではありません) ニール・クリスチャン、1943 年 - 2012 年、ロックンロールのボーカリスト
ご覧のとおり、startDate (イベント関連のプロパティ) はイベントの場合にのみ考慮されます。
検索エンジンは多くのテーブルをスキャンする必要があるため、専用のソフトウェア (Sphinx、Lucene、...?) を使用して、検索専用の別のインデックスを作成する必要があると考えています。
そのようなインデックスを構築するための解決策を提案できる人はいますか? その検索エンジンのベースとして、どのソフトウェアを使用できますか?
編集:
明確にするために、どのプロパティも必須ではありません。それらには、完全一致を使用して検索される日付が含まれているものもあれば、完全一致を使用して検索される短いテキスト (場所など) が含まれているものもあります。ただし、それらの一部には長いテキストが含まれているため、全文検索する必要があります。