11

これを可能にするストレージと検索の内部構造は何ですか? 核心のように?

たとえば、ある用語に一致する 100 万のドキュメントと、AND クエリの 2 番目の用語に一致するその他の 100 万のドキュメントがあるとします。lucene はどのように交差を高速に行ってトップ k を取得するのですか?

用語ごとにドキュメントIDSの昇順でドキュメントを保存していますか? 次に、2 つのタームのドキュメントを交差させる必要がある場合、両方のセットを 1 回のパスで段階的に反復することにより、両方のセットで最初に共通する k 個のドキュメントを探します。

それとも、より大きなドキュメント配列からの単純な順序付けられていないハッシュ セットを使用して、共通ドキュメントを検索しますか?

または、ユーザーが要求するドキュメントの数、個々の用語に一致するドキュメントなどに応じて、そのような(またはそれ以上の)タイプの交差ポリシーが使用されますか?

ドキュメント配列のマージの核心を指摘できる記事があれば、歓迎します。

編集:情報をありがとう。今では理にかなっています。スキップリストは魔法のようです。明確な理解を得るために、さらに掘り下げます。

4

3 に答える 3

5
  1. インデックスには、ソートされたドキュメントが含まれています。and operator(term1 AND term2)でクエリを実行すると、2つのイテレータが使用されるため、最初のterm1がdocNで始まることがわかっている場合は、term2のすべてのドキュメントをdocNまでスキップできます。したがって、nextメソッドのイテレータだけでなく、非常に効率的なskipToメソッドもあります。スキップリストインデックス(http://en.wikipedia.org/wiki/Skip_list)で実装されています。したがって、メソッドnextとskipToを使用することで、大きなチャンクに対して非常に高速に反復し、データがスパースであるため(たとえば、通常のデータベースでは機能しません)、非常に効率的です。
  2. luceneはNのみを保持するため、すべてのスコアドキュメントを並べ替えるよりもはるかに高速であるという他のポイント。ベスト10をリクエストすると、ベスト20のドキュメントをリクエストする場合よりも2倍速くなります。
于 2011-10-10T14:03:24.727 に答える
1

Luceneは、状況に応じて、ソートされたドキュメントIDと交差するか、ビットセットのウィンドウを使用します。BooleanScorerの上部にあるコメントを参照してください。

于 2011-10-08T04:24:58.643 に答える
1

Intersection は、ID が既にソートされていることを除いて、 sort-merge joinに似ています。詳細については、このブログ投稿を参照してください。

于 2011-10-10T02:19:18.527 に答える