0

ストア検索に Lucene.net (バージョン 2.0.0.4) を使用する Web アプリケーションに取り組んでいます。私の Web アプリケーション ユーザーは、特定の場所から 50 マイル以内にある米国内の店舗を検索できます。サードパーティ API を使用して、半径内のすべての都市を検索しています。ニュージャージー州エジソンなどの都市では、40 マイル以内に約 450 の都市が見つかります (API は 450 の都市を含む .Net ハッシュテーブルを返します)。このハッシュテーブルを繰り返し処理することで、BooleanQuery/Query クラスを使用して lucene クエリを構築しています。

このシナリオでは、lucene を介して検索結果をビルド、実行、および返すのに多くの時間がかかっていることがわかりました。このコードを最適化する方法はありますか??

ありがとう!

4

3 に答える 3

1

インデックスを作成するときは、都市を緯度と経度の座標にマッピングします。Web アプリで半径検索を行う場合、検索した都市を座標にマップし、範囲クエリを実行します (距離を座標の単位に変換する必要があります)。

これは、円ではなく正方形を検索するという点で不完全ですが、正確にする必要がある場合は、元の半径の外側で結果をフィルター処理するコードを記述できます。

于 2009-01-27T21:40:29.777 に答える
0

このパフォーマンスの鍵は、データをどのように保存するかを考え、その周りに何らかのメタデータを持たせることだと思います.

それはどういう意味ですか?

たとえば、NJ に店舗がある都市のリストを用意し、マスター リストに基づいてサード パーティの API から返された都市を除外します。返された 450 件のうち 5 件しか一致していないことがわかる場合があります。同様に、450 個のクエリを 1 つのクエリにまとめるつもりはありません。

また、州に基づいてインデックスを作成できる場合は、小さなインデックス (特に NJ の場合) の方が、大きなインデックスで特定の州のデータを選択するよりも効率的にクエリを処理できることがわかります。

これが役に立てば幸いです、シアラン

于 2008-12-31T11:21:06.040 に答える
0

KenE の答えは良いものです。そのアプローチの詳細については、「lucene 空間検索」をグーグルで検索する必要があります。

半径が常に 40 マイルであると仮定すると、もう 1 つの方法があります。プロセスを逆にするだけです。

というフィールドがありnearyby_cityます。インデックス内のすべての店舗について、半径 40 マイル内にある都市のリストを追加します。これで、ニュージャージー州エジソンの近くの店舗を検索するときにnearby_city:"Edison, NJ"、クエリに用語を追加するだけです。これで、その都市から 40 マイル以内の店舗のみがクエリに一致します。

于 2009-01-29T08:15:14.410 に答える