4

フィルタリングを実行し、記事のリストから結果を取得する必要があるアプリケーションがあります。データベースには、ORMとしてNHibernateを使用してMySQLを使用しています。クエリはキーワードに基づいて全文検索も行い、このためにLucene.Netを使用します。

私の問題は、クエリが「両方の」ドメインにまたがっていることです。たとえば、「トラフィック制御」というキーワードを含み、PublishedOn<2012-10-01のすべての記事を取得する必要がある場合があります。また、クエリはページサイズが50のページ#2などのページ付けを使用します。問題は、MySQL(PublishedOn部分用)とLucene.Netの両方にまたがるクエリを作成して全文を利用するにはどうすればよいかということです。検索機能。

最初にMySQLで検索を行うと、最初の50を取得することはできません。これは、結果がLuceneでさらにフィルタリングされる可能性があり、ページサイズとして50が必要になるためです。Lucene.Netから始めても同じことが言えます。また、できれば「関連性」による順序付けであることが望ましいため、これはMySQLではなくLuceneが実行できることです。

私の現在のアプローチは、最初にMySQLでフィルタリングし、一致したレコードのすべての主キーを取得することです。次に、Luceneでクエリを実行し、主キーを結果のリストに一致させるterm-queryを使用します。ただし、Luceneはこのようなクエリには非常に時間がかかり、データベースには200,000を超える記事が含まれる可能性があります。Luceneでは、このようなクエリを実行するのに時間がかかりますが、全文検索では非常に高速です。

そのような問題に対処するためにどのように取り組むことができるかについてのアイデアはありますか?

4

1 に答える 1

0

Luceneは、全文検索だけではありません。LuceneドキュメントにPublishedOnプロパティを追加して、次のようなクエリを実行できます。

Text:"traffic control" AND PublishedOn:[00000000 TO 20121001]

Lucene構文ドキュメントの「範囲検索」セクションを確認してください。

于 2012-09-30T08:05:01.543 に答える