0

今、私はいくつかの比較を行う必要があり、結果のフィルタリングを行う必要がありますが、これは非常に簡単ではありません。私が欲しいのはLucenes検索のようなものですが、それを開発するのは私だけです.Luceneを使っていたとしても、それは私の決定ではありません. .

私がすることは次のとおりです。

  1. 特定のフィールドの完全な単語一致に従って要素を検索し、そうでない場合は、それで始まるかどうかを確認し、それが含まれているかどうかを確認します。
  2. すべてのフィールドには、一致するケース (full->begins->contains) と優先順位に従って重みがあります。
  3. 1 つが一致した後、他のフィールドの重みもチェックして、最終的な合計行の重みを作成します。
  4. 次に、行とその重みの両方のマップを返します。

これは、休止状態の HQL では簡単に実行できないことに気付きました。つまり、これを行うには複数のクエリを実行する必要があります。

したがって、私の質問は、すべてのレコードを取得してターゲットを見つけるために計算を行う必要があることを意味する Java で実行する必要があるか、または複数のクエリを実行して休止状態で実行する必要があるかということです。性能と速度でどっちがいい?

4

1 に答える 1

0

残念ながら、正しい答えは「場合による」と思います。単語の数、データ構造、データがメモリに収まるかどうか、検索を行う頻度などです。

Hibernate が含まれていなくても、データベースの方が優れたソリューションであると考える傾向があります。より良い SQL の書き方を学ぶ必要があるかもしれません。おそらく、Hibernate が生成する動的 SQL では十分ではありません。適切な JOIN とインデックス作成により、これがうまく機能する可能性があります。

考慮すべき 3 つ目の方法があるかもしれません: Lucene とインデックス作成です。決定するには、あなたの問題についてもっと知る必要があります。

于 2013-04-23T10:02:59.667 に答える