Your SlideShare is downloading. ×
転置インデックスとTop k-query
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

転置インデックスとTop k-query

8,768
views

Published on

転置インデックスから上位k件を取得する方法について

転置インデックスから上位k件を取得する方法について


0 Comments
20 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
8,768
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
72
Comments
0
Likes
20
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 坪坂正志mail : m.tsubosaka(at)gmail(dot)com
  • 2. 今回の話の概要 転置インデックスに対してdisjunctiveなクエ リで問い合わせを行った際に上位k件を取っ てくるためのDAAT(Document-at-a-time) ベースの効率的な手法について紹介する
  • 3. ようするに 大規模な文章セットに対する”watch OR iwc OR rolex”というクエリに関連度の高い文章 を高速に持ってきたい
  • 4. 話の流れ 転置インデックスについて TAAT, DAAT Top-k Query  max-score  inteval-based prunning  other method ○ wand ○ layered-index
  • 5. 転置インデックスとは 単語がどの文章に出現するかを格納した索引 構造  例えば下の構造から”iwc”が含まれる文章は文章1,5 の2つであることが分かる  また単語に紐づいてるリストを転置リストと呼ぶ iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 6. 転置インデックスの利点 全体の文章に対してはるかに少ない量のリ ストを見るだけでよい  例えば英語版Wikipediaの記事は約397万あるが、 そのうちiwcが含まれる記事は284件 ANDやORなどの論理演算が含まれるクエリ と相性が良い
  • 7. 代表的なクエリのタイプ AND検索 (Conjunctive query)  クエリ = (1 , … , )が与えられた時に全ての が含まれる文章を返す  例 : = (ℎ, , )ならば”watch”, “iwc”, “rolex”全てが含まれる文章を返す OR検索 (Disjunctive query)  クエリ = (1 , … , )が与えられた時に のいず れかが含まれる文章を返す  例 : = (ℎ, , )ならば”watch”, “iwc”, “rolex”いずれかが含まれる文章を返す
  • 8. ANDクエリとORクエリ 一般にANDクエリとORクエリの場合ANDク エリの方が高速 また、簡単な絞り込み用途としての検索エ ンジンであればANDクエリのみで十分なこ とが多い 一方でORクエリが有用なケースも多い
  • 9. ORクエリが有用な例 クエリ拡張  代表的な検索エンジンで”algorithm”と検索する と”アルゴリズム”が含まれる記事もヒットしたり する  このようにシノニムなどが含まれる記事もヒッ トするようにしたい場合はORクエリが使われる ○ この場合は”algorithm” OR “アルゴリズム”などのよ うになる ○ *検索エンジンの中の人ではないので本当にこうし てるかは知りません
  • 10. ORクエリが有用な例 類似検索  表示されてる文章から類似の文章を検索する  ex : コンテンツ連動型広告、関連文表示  文章中の単語が全部含まれてるというのはあり えないので、ANDクエリでは文章がヒットしな い
  • 11. 話の流れ 転置インデックスについて TAAT, DAAT Top-k Query  max-score  inteval-based prunning  other method ○ wand ○ layered-index
  • 12. ORクエリの実装 ORクエリの高速化について見ていく前に naiveな実装について説明する 代表的な手法として  TAAT(Term-at-a-time)  DAAT(Document-at-a-time) の2つが存在する
  • 13. TAATについて Termごとに順番に処理していく手法 処理の結果はアキュムレータという中間 データに格納されていく
  • 14. TAATの例 例として”iwc OR rolex OR watch”というクエリ を考える 初めに空のアキュムレータを作成するaccumulator = {} iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 15. TAATの例 iwcに関する転置リストをaccumulatorに入 れるaccumulator = {1,5} iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 16. TAATの例 rolexに関する転置リストをaccumulatorと マージするaccumulator = {1,2,3,5} iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 17. TAATの例 watchに関する転置リストをaccumulatorと マージするaccumulator = {1,2,3,4,5} iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 18. TAATの例 結果文章1,2,3,4,5がクエリに適合すること が分かるaccumulator = {1,2,3,4,5} iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 19. TAATのメリット・デメリット 実装が簡単 シーケンシャルアクセス中心になるので データがファイルに格納されてる時に割と 性能がよい 最近流行してるsuffix treeなどのデータ構造 系と相性が良い [G. Navarro and Y. Nekrich 2012] アキュムレータがORの結果が多くなるほど 負荷が大きくなる
  • 20. DAATについて クエリに関する転置インデックスを文章番 号順に処理していく
  • 21. DAATの例 各単語の転置インデックスの先頭にカーソ ルを設定する iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 22. DAATの例 カーソル上の文章番号の最も小さい文章を 処理する  この場合は1 iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 23. DAATの例 カーソルを次に進める iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 24. DAATの例 カーソル上の文章番号の最も小さい文章を 処理する  この場合は2 iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 25. DAATの例 カーソルを次に進める iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 26. DAATの例 カーソル上の文章番号の最も小さい文章を 処理する  この場合は3 iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 27. DAATの例 カーソルを次に進める iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 28. DAATの例 カーソル上の文章番号の最も小さい文章を 処理する  この場合は4 iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 29. DAATの例 カーソルを次に進める iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 30. DAATの例 カーソル上の文章番号の最も小さい文章を 処理する  この場合は5 iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 31. DAATの例 カーソルが最後まで来たので終了 一連の処理では1,2,3,4,5の順で文章を処理 した iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 32. DAATのメリット・デメリット 文章番号の小さい順に処理をするところは Priority Queueというデータ構造を使うと効率 的に処理できる  例えばLuceneのorg.apache.lucene.search. DisjunctionSumScorerの実装が参考になる アキュムレータを持つ必要がない 文章ごとに処理していくので、フィルタ処理な どとの相性が良い  例えば値段が50万円以下のもののみ出力する、メン ズ用品のみ出力するなど  Luceneの実装もDAATになっている ファイルへのランダムアクセスが多い
  • 33. 話の流れ 転置インデックスについて TAAT, DAAT Top-k Query  max-score  inteval-based prunning  other method ○ wand ○ layered-index
  • 34. OR検索をどうやって高速化するか 単純にORでマッチする全部を取る必要があ る場合は候補数が多い時にどうやっても処 理に時間を要する しかし、検索結果の上位数件だけ必要であ れば上位に来る可能性がない文章の評価を スキップすることにより、処理の高速化が 可能となる このような問い合わせに対して上位k件のみ 取り出すことをtop-k query processingと呼 ぶ
  • 35. 文章のランク付け 上位k件を出力するためには、クエリに対して どの文章の順位が高いかを決定する必要がある どういった文章が適合してるかを考えてみる  例えば“watch”のみ含まれる文章では置時計や動詞の watchが含まれる文章もヒットし、また数も大量にあ るため、”iwc”のみが含まれる文章の方が関連性が高 いと考えられる  また”iwc”のみ含まれるページより”iwc”と”rolex”を含 むページの方が関連性が高い  “iwc”を1回含む文章よりも2回含む文章の方が関連度 が高い
  • 36. 文章のランク付け クエリ = (1 , … , )に対して、文章のス コアを , = ( , )の形で 表す ( , )は文章における の出現頻度、 の珍しさなどが加味された値となる またこの後の議論の都合上 , ≥ 0 を仮定する この形のスコアリング関数にはTF-IDF, BM25などの多くの代表的なものが含まれる
  • 37. 転置インデックスの拡張 転置インデックスに対して、scoreの値およ び各単語のscoreの最大値を付与する  図では(文章番号, スコア)という形式で書く iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,3) (5,1)max_score=3 watch (1,1) (2,2) (4,1) (5,1)max_score=2
  • 38. 話の流れ 転置インデックスについて TAAT, DAAT Top-k Query  max-score  inteval-based prunning  other method ○ wand ○ layered-index
  • 39. max_score [H.R. Turtle and J. Flood, 1995]  今上位k位に入るための閾値が4だとすると watchのみ含む文章はmax_score=2から絶対 に候補に入ることが無いことを利用する iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,3) (5,1)max_score=3 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 40. max_scoreの例1 上位1件のみ取ることを考える 最初の文章1を評価するとスコアは6になる iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,3) (5,1)max_score=3 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 41. max_scoreの例1 1位のスコアが6のため”watch”+”rolex”ではスコ アが5にしかならないので、候補となる文章は 必ず”iwc”を含まなければならない iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,3) (5,1)max_score=3 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 42. max_scoreの例1 ”iwc”のカーソルを進める iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,3) (5,1)max_score=3 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 43. max_scoreの例1 他の2つに関しては”iwc”を含まないものを評価しても意 味が無いので文章5まで飛ばす  実装上ここで効率的に飛ばすためには転置インデックスに100 個先までのポインタなどを持たせる必要がある iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,3) (5,1)max_score=3 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 44. max_scoreの例1 文章5を評価してスコアが4であることを得 る iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,3) (5,1)max_score=3 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 45. max_scoreの例1 全て見たので終了 処理の中で文章1,5のみを評価しており、2,3,4 の評価を飛ばせている iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,3) (5,1)max_score=3 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 46. max_scoreの例2 上位1件のみ取ることを考える  ただ前のとスコアの設定が違う 最初の文章1を評価するとスコアは6になる iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,5) (5,1)max_score=5 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 47. max_scoreの例2 1位のスコアが6のため”watch”のみではスコア が2にしかならないので、候補となる文章は必 ず”iwc”か”rolex”を含まなければならない iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,5) (5,1)max_score=5 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 48. max_scoreの例2 “iwc”のカーソルを進める iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,5) (5,1)max_score=5 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 49. max_scoreの例2 “watch”の方は文章2まで飛ばす iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,5) (5,1)max_score=5 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 50. max_scoreの例2 文章2を評価してスコアが3であることを得 る iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,5) (5,1)max_score=5 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 51. max_scoreの例2 “rolex”のカーソルを進める  “watch”の方は3以降に飛ばす iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,5) (5,1)max_score=5 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 52. max_scoreの例2 文章3を評価して、スコアが5であることを 得る iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,5) (5,1)max_score=5 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 53. max_scoreの例2 “rolex”のカーソルを進める  “watch”の方は5以降に飛ばす iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,5) (5,1)max_score=5 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 54. max_scoreの例2 文章5を評価してスコアが4であることを得 る iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,5) (5,1)max_score=5 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 55. max_scoreの例2 一連の流れで文章1,2,3,5の評価を行なって いる iwc (1,5) (5,2)max_score=5 rolex (2,2) (3,5) (5,1)max_score=5 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 56. max_score 補足 今上げた2つの例では文章1が最も大きいス コアになる例であったが、文章の途中のも のが1番になった場合、閾値もそれにあわせ て変化していく 例2では閾値が6のときに”iwc”と”rolex”を含 むの代わりに”iwc”と”watch”を含むとしても 良かったが、通常は転置リストの長いもの もしくはスコアが低いものから候補から除 外していく
  • 57. max_scoreの性能 例えば[M. Fontoura+, 2011] では約340万文 章、3GBの広告データに対して平均長57.76 のクエリ検索を行った場合  Naive DAAT 26778.3 μsec  DAAT max_score 9321.3 μsec と2.8倍近い性能改善が報告されている * この辺りの性能改善率に関しては検索エン ジンの性能および文章の性質に強く依存す る
  • 58. topdocsの利用[T. Stohman+, 2005] 極端にスコアが大きい文章のみ別の転置インデックスに 分ける  実装によってはメタデータに格納することもある  下の例ではこれにより文章2より先は”iwc”もしくは”rolex_2”が 入った文章のみ評価すれば良いことが分かる iwc (1,5) (5,2)max_score=5 rolex_1 (2,2) (5,1)max_score=2 rolex_2 (3,5)max_score=5 watch (1,1) (2,1) (4,2) (5,1)max_score=2
  • 59. 話の流れ 転置インデックスについて TAAT, DAAT Top-k Query  max-score  inteval-based prunning  other method ○ wand ○ layered-index
  • 60. 閑話:modernな転置インデックスの機能 多くの場合転置リストはブロックごとに圧 縮されて格納されている 例えば転置リストの内容が{1,3,6,8,15,16}で あれば{1,3},{6,8},{15,16}と分けられており、 内部は圧縮されている 圧縮アルゴリズムはVbyte, Simple9, PForDeltaなどがある.  例えば[H. Yan+, 2009]などが参考になる
  • 61. ブロック圧縮された転置インデックスに対する検索手法 ブロックは圧縮されているのでなるべく decode処理を飛ばしたい またデータをブロック単位で持ってるので ブロックごとのスコアの最大値や最小値を 持つことができる ブロック圧縮された転置インデックスに対 する検索手法はここ最近2件ほど独立に手法 が提案されている  [K. Chakrabarti+, 2011] [S. Ding and T. Suel, 2011]  今回は主に[K. Chakrabarti+, 2011]の紹介を行う
  • 62. Interval-based pruning for top-k processingover compressed lists  ここからは最近の研究である  K. Chakrabarti, S. Chaudhuri and V. Ganti : Interval-based pruning for top-k processing over compressed lists, ICDE, 2011  の紹介を行う  著者はMicrosoft Researchの研究者
  • 63. モチベーション k=1のとき、通常のmax_scoreを実行すると文章9 の時点でスコアが8になり、1 の転置リストのみ では1位に届かないのでブロックDは飛ばせる 一方で文章3を見た時にスコアが3になり、ブロッ クBの最大値は2であるため本来はdecodeしなく てもよいが通常のmax_scoreではここをdecodeし てしまう max_score=5 max_score=6 [K. Chakrabarti+, 2011]より
  • 64. 提案手法 与えられたクエリに対するブロックから区 間を作成して、Upper boundが現在の閾値以 上の区間のみ評価する [K. Chakrabarti+, 2011]より
  • 65. 例  論文のFig1の例、数値は一部変えてある A B C D E(1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G(1,2) (9,3) (15,6) (16,1)
  • 66. 例  区間を生成して、取り得る最大のスコアを 計算する区間 [1,3] (3,5) [5,8] (8,9] (9,11] (11,12] (12,14] (14,15) [15,16]maxscore 6 3 4 8 5 1 2 0 7 A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1
  • 67. 例  始めの区間に関して, max_scoreを実行する  このときブロックA,Fをデコードする区間 [1,3] (3,5) [5,8] (8,9] (9,11] (11,12] (12,14] (14,15) [15,16]maxscore 6 3 4 8 5 1 2 0 7 A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1
  • 68. 例  一位のスコアが5となるので、続く2つの区 間は見なくてよい  ブロックBのデコードはスキップされる区間 [1,3] (3,5) [5,8] (8,9] (9,11] (11,12] (12,14] (14,15) [15,16]maxscore 6 3 4 8 5 1 2 0 7 A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1
  • 69. 例  区間(8,9]を処理して、文章9のスコアが8で あることを得る  このときブロックCがデコードされる区間 [1,3] (3,5) [5,8] (8,9] (9,11] (11,12] (12,14] (14,15) [15,16]maxscore 6 3 4 8 5 1 2 0 7 A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1
  • 70. 例  残りは全てスキップできる区間 [1,3] (3,5) [5,8] (8,9] (9,11] (11,12] (12,14] (14,15) [15,16]maxscore 6 3 4 8 5 1 2 0 7 A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1
  • 71. Interval-baseの利点 max_scoreがglobalな最大値のみ使うのに対 して、ブロックごとの最大値を利用できる のでより枝刈りが利用できる 区間の数は高々ブロックの数の2倍程度にし かならない  通常ブロックには100個程度の文章idが格納され ているので、長さ10万程度の転置リストでもブ ロックは1000個程度しかないので、区間の生成 はほとんど負荷にならない
  • 72. 区間へのアクセス方法 例では前から順に区間にアクセスしていっ たが論文ではこれをPruneSeqと言っている 他にはPruneScoreOrder, PruneHybrid, PruneLazyというアクセス方法を提案してい る
  • 73. PruneScoreOrder  スコアが高い区間から順にアクセスする  下の例では最初の区間で最大値を得るので、残 りは全てスキップできる区間 [1,3] (3,5) [5,8] (8,9] (9,11] (11,12] (12,14] (14,15) [15,16]maxscore 6 3 4 8 5 1 2 0 7 A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1
  • 74. PruneHybrid PruneScoreOrderの欠点として、  ランダムアクセスが多く発生すること  同じ転置リストのブロックに何回もアクセスするこ とがある ○ これに関して論文ではキャッシュを用意して、なるべ くディスクから読む回数及びデコード回数を少なくす るという工夫が成されている これに対してPruneHybridでは上位x%の区間の みPruneScoreOrderを実施し、そこで得た閾値 を元にPruneSeqを実施するというのが PruneHybridである  x=0のときPruneSeqと一致し  x=100のときPruneScoreOrderと一致する
  • 75. PruneLazy 転置リストのIOがランダムになることを防 ぐため 1. 一定量の区間のブロックをメモリに読み 込む  このときdecodeは行わない 2. 読み込んだ区間に関して、スコア順に区 間を処理していく  閾値によってはいくつかの読み込んだブロック に関してはdecodeは飛ばされる を繰り返す
  • 76. 実験結果 TREC Terabyte (800万ページ)のデータセッ トで実験  max_scoreに近い手法に比べて3-6倍の性能改善 [K. Chakrabarti+, 2011]より
  • 77. 話の流れ 転置インデックスについて TAAT, DAAT Top-k Query  max-score  inteval-based prunning  other method ○ wand ○ layered-index
  • 78. WAND [A. Broder+, 2003] 転置リストを先頭の文章番号の順に並べて、 pivotとなるtermの文章番号より前にある転置リ ストのカーソルを進める手法  今閾値が7であるとすると”rolex”のみでは閾値に届か ないので”iwc”も必要になる. このため”rolex”のカーソ ルを5以降に飛ばしてよいことが分かる  max_scoreだと”watch”の方を除外してしまうので文 章2,3を評価してしまう rolex (1,1) (2,5) (3,1)max_score=5 iwc (1,5) (5,2) pivot termmax_score=5 watch (1,1) (6,1) (7,2) (8,3)max_score=3
  • 79. WANDの変形 WANDの改良としては  メモリ上の実行に適したmWAND [M. Fontoura+, 2011]  ブロック情報を利用したBlock-max WAND (BMW) [S. Ding and T. Suel, 2011] がある 両論文とも割と読みやすい
  • 80. Layered-index [T. Stohman and W. Croft, 2007]  スコアに応じて、転置リストを複数に分ける  クエリの評価はTAATベースで行い、スコアが高いリスト から順にマージしていく  途中でこれ以上アキュムレータにないものを追加しても上位k件 に入らないときはアキュムレータ内のみで評価する. アキュム レータ内のものでも上位k件に入る可能性の無いものを除外する などの最適化が行われる iwc_1 (1,8) max_score=8 rolex_1 (2,5) (4,6) max_score=6 rolex_2 (5,4) (6,4) max_score=4 iwc_2 (4,3) (5,2) max_score=3 rolex_3 (1,1) (3,1) max_score=1
  • 81. まとめ 転置インデックスに対してdisjunctiveなクエ リで問い合わせを行った際に上位k件を取っ てくるためのDAAT(Document-at-a-time) ベースの効率的な手法について述べた この辺りの論文はquery-processingという キーワードでSIGIRなどの情報検索系の会議 によく投稿される
  • 82. 参考文献 情報検索の基本的な教科書  [S. Büttcher+ 2010] Information Retrieval: Implementing and Evaluating Search Engines, MIT Press Max-score  [H.R. Turtle and J. Flood, 1995] Query evaluation: strategies and optimization. Information processing and management  [T. Stohman+, 2005] Optimization strategies for complex queries, SIGIR  [K. Chakrabarti+, 2011] Interval-based pruning for top-k processing over compressed lists, ICDE WAND  [A. Broder+, 2003] Efficient query evaluation using a two-level retrieval process, CIKM  [M. Fontoura+, 2011] Evaluation strategies for top-k queries over memory-resident inverted indexes, VLDB  [S. Ding and T. Suel, 2011] Faster top-k document retrieval using block-max indexes, SIGIR Layered Index  [V. N. Anh and A. Moffat, 2006] Pruned query evaluation using pre-computed impacts, SIGIR  [T. Stohman and W. Croft, 2007] Efficient document retrieval in main memory, SIGIR その他  [H.Yan+ 2009] Inverted index compression and query processing with optimized document ordering, WWW  [G. Navarro and Y. Nekrich 2012] Top-k Document Retrieval in Optimal Time and Linear Space, SODA