<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>San Jose, CA, USA
$ joel.mackenzie@uq.edu.au (J. Mackenzie); mkp@amazon.com (M. Petri); luke.gallagher@rmit.edu.au
(L. Gallagher)</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>IOQP: A simple Impact-Ordered Query Processor written in Rust</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Joel Mackenzie</string-name>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Matthias Petri</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Luke Gallagher</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Amazon Alexa</institution>
          ,
          <addr-line>Manhattan Beach, California</addr-line>
          ,
          <country country="US">USA</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>RMIT University</institution>
          ,
          <addr-line>Melbourne</addr-line>
          ,
          <country country="AU">Australia</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>The University of Queensland</institution>
          ,
          <addr-line>Brisbane</addr-line>
          ,
          <country country="AU">Australia</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2022</year>
      </pub-date>
      <volume>000</volume>
      <fpage>0</fpage>
      <lpage>0001</lpage>
      <abstract>
        <p>Impact-ordered index organizations are suited to score-at-a-time query evaluation strategies. A key advantage of score-at-a-time processing is that query latency can be tightly controlled, leading to lower tail latency and less latency variance overall. While score-at-a-time evaluation strategies have been explored in the literature, there is currently only one notable system that promotes impact-ordered indexing and eficient score-at-a-time query processing. In this paper, we propose an alternative implementation of score-at-a-time retrieval over impact-ordered indexes in the Rust programming language. We detail the eficiency-efectiveness characteristics of our implementation through a range of experiments on two test collections. Our results demonstrate the eficiency of our proposed model in terms of both single-threaded latency, and multi-threaded throughput capability. We make our system publicly available to benefit the community and to promote further research in eficient impact-ordered query processing.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Impact-Ordered indexes</kwd>
        <kwd>Score-at-a-Time retrieval</kwd>
        <kwd>Learned sparse models</kwd>
        <kwd>Empirical experimentation</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>Despite their simplicity, inverted indexes continue to be an important data structure for eficient
and scalable retrieval over large document collections. Inverted indexes maintain, for each
unique term discovered during indexing, a list of documents which contain the given term
(known as a postings list), with perhaps some statistical information such as the number of
times each term appeared within each document. These postings lists then allow documents to
be eficiently matched and ranked given an input query.</p>
      <p>
        While a range of inverted index organizations and retrieval methods have been investigated,
score-at-a-time (SaaT) retrieval over impact-ordered indexes remains a rather under-explored
alternative to document-at-a-time (DaaT) retrieval over document-ordered indexes [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Indeed,
SaaT retrieval was first discussed over two decades ago [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], but has since fallen out of favor
with DaaT systems becoming the predominate focus in both academic research and industrial
search applications [
        <xref ref-type="bibr" rid="ref1 ref3 ref4">3, 1, 4</xref>
        ].
      </p>
      <p>
        Recently, SaaT retrieval has been revisited in the context of so-called learned sparse models,
which employ neural networks to learn per-document term weights which can then be stored
within an inverted index. Due to the somewhat unconventional term and document weightings
that arise from these learned models, DaaT dynamic pruning algorithms [
        <xref ref-type="bibr" rid="ref5 ref6">5, 6</xref>
        ] are not able to
efectively exploit the term-wise upper-bound information that usually allows scoring operations
to be bypassed, making them less eficient than when used in conjunction with traditional
statistical bag-of-words models. SaaT retrieval, however, has been shown to provide competitive
trade-ofs between eficiency and efectiveness in the context of learned sparse retrieval, rivaling
even the most eficient DaaT algorithms [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
      </p>
      <p>In this work, we describe IOQP, an impact-ordered query processor written in the Rust
programming language. We report some preliminary experiments to demonstrate the eficiency
and efectiveness of IOQP in both single-threaded retrieval and multi-threaded throughput
experiments, and with both traditional and learned sparse retrieval models. Our findings
show that SaaT retrieval implemented in Rust has comparable eficiency to that of a highly
optimized C++ implementation. We hope to encourage further research in this interesting area
of Information Retrieval (IR) by contributing to a more diverse ecosystem of available resources.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Background</title>
      <sec id="sec-2-1">
        <title>2.1. Document Ranking Models</title>
        <p>
          Traditional bag-of-words (BoW) ranking models such as BM25 [
          <xref ref-type="bibr" rid="ref8 ref9">8, 9</xref>
          ] assume term independence,
and score documents as a sum of term-document contributions across the terms in a given
query. Recently, however, a new class of learned sparse ranking models have been investigated
by the IR community [
          <xref ref-type="bibr" rid="ref10 ref11 ref12 ref13 ref14 ref15 ref16 ref17">10, 11, 12, 13, 14, 15, 16, 17</xref>
          ]. These models are derived by training neural
networks (typically transformer-based models such as BERT) in a supervised manner to learn
term-document contributions. During inference, a learned sparse model generates a prediction
for each term-document impact which is then stored within a classical inverted index structure.
Then, documents can be scored by summing these impacts across query terms.
2.2. Impact-Ordered Indexing and Score-at-a-Time Retrieval
Impact-ordered indexes organize each postings list into a number of segments, each of which
is representative of a given term-document impact score. These impacts are typically
precomputed during indexing. Since many ranking models produce floating point scores which
are dificult to compress, a quantized integer representation is stored instead. These integers
are typically generated by uniformly quantizing the entire floating point score range into the
integers in the range [0, 2 − 1], with  representing the number of bits required to store each
quantity [
          <xref ref-type="bibr" rid="ref18 ref2">2, 18</xref>
          ]. Within each segment, a list of strictly increasing document identifiers is
maintained. Figure 1 demonstrates this simple arrangement.
        </p>
        <p>
          These impact-ordered postings lists allow for SaaT retrieval, where candidate segments can
be visited in descending order of their impact score, thereby allowing high scoring documents
to be rapidly identified. Currently, JASSv2 [
          <xref ref-type="bibr" rid="ref19 ref20">19, 20</xref>
          ] is the only open-source SaaT retrieval
framework available to the community.
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. IOQP</title>
      <sec id="sec-3-1">
        <title>3.1. Indexing</title>
        <p>
          Now, we describe the implementation of IOQP, including the indexing and retrieval components,
and describe how IOQP can handle multiple incoming requests over a HTTP endpoint.
Instead of building an indexing pipeline, we implemented IOQP to read pre-built common index
ifle format (CIFF) indexes [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]. This allows the complexities of indexing to be outsourced to
other systems, and provides better integration with existing Rust tools [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ]. Although the CIFF
provides pre-built indexes which can be accessed through a standardized protobuf API, these
indexes need to be re-written into a suitable format for use within IOQP. In the most simple case,
where the postings inside the CIFF are pre-quantized, this involves iterating the CIFF structure
and re-organizing the underlying data into the IOQP index format. In the more complex case,
where the CIFF structure contains raw term-frequency information, it will need to be scored
and quantized by IOQP before it can be indexed; to support this, we implemented a variant of
the common BoW BM25 model [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] and a uniform score quantizer [
          <xref ref-type="bibr" rid="ref18 ref2">2, 18</xref>
          ] which converts floating
point scores into quantized impacts in a fixed range [0, 2 − 1]. These indexing processes are
implemented with parallel processing capability.
        </p>
        <p>
          The document identifiers within each segment are delta-coded and compressed with
SIMDenabled bitpacking algorithms (SIMD-BP) [
          <xref ref-type="bibr" rid="ref23 ref24">23, 24</xref>
          ]. The specific implementation of SIMD-BP
can operate on blocks of 128 or 256 integers, depending on the CPU instructions available on
the target system; shorter blocks are encoded with StreamVByte [
          <xref ref-type="bibr" rid="ref25">25</xref>
          ].
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>3.2. Query Processing</title>
        <p>Score-at-a-time query processing is quite simple. In IOQP, each query is assigned a Scratch
data structure (the in-memory representation required to execute a single query). This Scratch
data structure contains: a vector for managing the candidate segments; bufers for decoding
the segments; an accumulator table for tracking document scores, and; a min-heap for finding
the top- ranked documents. There are three key steps for processing a query: (1) determine
which impact segments to process; (2) process those segments, and; (3) determine the top-
documents from the scores in the accumulator table.
Determining which Segments to Process The first step is to decide which segments should
be processed, and the order in which they should be processed. This involves arranging a vector
of metadata entries which, for each candidate segment, describe the location of the segment in
memory, the impact of the segment, and the number of entries it holds. The vector is arranged
such that the segments are visited in descending order of the impacts.</p>
        <p>
          Processing the Segments The next step is to process the segments. At this stage, the
accumulator table may contain data from the previous query, so it needs to be cleared. We
rely on the Rust compiler to optimize this process, although other optimizations have been
investigated [
          <xref ref-type="bibr" rid="ref26 ref27">26, 27</xref>
          ]. Then, while fewer than  postings have been visited, the next candidate
segment is decoded into the bufer; for each document in the segment, the impact score is added
to the corresponding accumulator. Also maintained is the maximum score of a document within
each chunk of  accumulators; we set  = 128 in our experiments, and leave finding the best
choice of  to future work. It is also worth noting that in IOQP, term impacts can either be
unweighted, or weighted according to the number of times each term appears in the query; the
only diference to processing is the value of the impact added to the accumulator table.
Determining the Top Documents Finally, the top- documents need to be returned to the
caller. Unlike JASSv2, IOQP does not keep track of the  highest scoring documents during
query processing, so they need to be found by scanning the accumulator table. Since linearly
scanning the entire accumulator table is ineficient, we push the first  accumulators into the
min-heap to establish an entry threshold,  . Then, since we maintain the maximum score of
each chunk of  accumulators, we traverse these chunks and only enter and scan those which
exceed the current value of  . Once all chunks have been traversed, the heap contains the top-
scoring documents. Figure 2 demonstrates this novel accumulator skipping strategy.
Early Termination Similar to the existing JASSv2 system, IOQP supports both exhaustive
and approximate processing modes. A parameter,  , determines the raw number of postings
to be processed, and can be set either as a constant value, or as a proportion of the available
postings on a query-by-query basis.1 IOQP will always process at least  postings, whereas
JASSv2 terminates before the number of postings processed exceeds  .
        </p>
      </sec>
      <sec id="sec-3-3">
        <title>3.3. IOQP Server</title>
        <p>In production IR environments, systems are provisioned such that multiple incoming queries
can be served simultaneously. Within IOQP, we provide a serve binary which hosts an index
inmemory, and provides a listener bound to an IP address and port. The listener waits for incoming
queries, represented as JSON objects, and hands them of to asynchronous processing threads;
the results are then returned to the caller as a JSON object. To ensure the index processing
server does not become overwhelmed under a high query load, the number of processing cores
can be limited during start-up.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Experiments</title>
      <sec id="sec-4-1">
        <title>4.1. Experimental Setup</title>
        <p>
          IOQP2 is written in Rust, and was compiled with rustc 1.61 using -O3 optimization as per the
default release profile. We use the most recent version of JASSv23 as a point of comparison. For
fairness, we modified the timing measurement within JASSv2 to ignore the cost of parsing query
terms, as this is not part of the latency measurement in IOQP. All collections were indexed using
Anserini [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] and converted to CIFF files. Those CIFF files were then reordered with recursive
graph bisection [
          <xref ref-type="bibr" rid="ref22 ref28 ref29">28, 29, 22</xref>
          ],4 which has been shown to accelerate SaaT traversal [
          <xref ref-type="bibr" rid="ref30">30</xref>
          ]. For both
IOQP and JASSv2, 8-bit quantization was used, and the score accumulators are represented
by 16-bit unsigned integers; where weighted queries are used, they are re-normalized to avoid
accumulator overoflws (since some scores may exceed 216 − 1). We deploy both IOQP and
JASSv2 with two processing modes: exhaustive processing involves processing all candidate
postings for each query; approximate processing uses  = 0.1 × | |, where || is the number
of documents in the collection [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ]. All retrieval runs are computed to depth  = 1,000.
        </p>
        <p>Experiments were conducted in-memory on an otherwise idle machine equipped with 2×
Intel Xeon Gold 6144 CPUs and 512 GiB of RAM; each CPU socket has access to 256 GiB of
RAM, implying a non-uniform memory access (NUMA) architecture.</p>
        <p>
          Collections and Queries We employ the MS MARCO passage collection [
          <xref ref-type="bibr" rid="ref31">31</xref>
          ], which contains
around 8.8 million passages. We use a range of traditional and neural augmented retrieval
models including BM25 on the original index (BM25) [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ], BM25 with a DocT5Query expanded
index (BM25-T5) [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ], and BM25 scoring over a DeepCT weighted index (DeepCT) [
          <xref ref-type="bibr" rid="ref10 ref11">10, 11</xref>
          ]. We
1All postings are processed when the number of postings in a query is less than  .
2See: github.com/jmmackenzie/ioqp (commit b7488e).
3See: github.com/andrewtrotman/JASSv2 (commit 5ba7f1).
4See: github.com/mpetri/faster-graph-bisection
also used learned sparse models including DeepImpact [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], uniCOIL [
          <xref ref-type="bibr" rid="ref14 ref15">14, 15</xref>
          ] with a TILDE
[
          <xref ref-type="bibr" rid="ref16 ref17">16, 17</xref>
          ] expanded index (uniCOIL-TILDE), and SPLADEv2 [
          <xref ref-type="bibr" rid="ref32">32</xref>
          ]. All models used the same
parameters as those described in prior work [
          <xref ref-type="bibr" rid="ref33 ref7">7, 33</xref>
          ]. All experiments on MS MARCO used the
dev queries, and measure efectiveness with RR@10.
        </p>
        <p>
          We also experimented with Gov2, a 25 million document crawl of .gov domains, using the
title queries from TREC terabyte track topics 701—850 [
          <xref ref-type="bibr" rid="ref34 ref35 ref36">34, 35, 36</xref>
          ], and the 60,000 TREC million
query track (MQT) queries [
          <xref ref-type="bibr" rid="ref37 ref38 ref39">37, 38, 39</xref>
          ]. Efectiveness is measured with AP, the oficial metric.
        </p>
      </sec>
      <sec id="sec-4-2">
        <title>4.2. Indexing</title>
        <p>Our first experiment briefly reports on the indexing time and index size of the IOQP indexes. In
our experiments, the MS MARCO passage indexes took between 13 and 90 seconds to generate,
depending on the specific scoring model (as the number of postings lists varies widely). The
larger Gov2 index took just under 7 minutes to generate, which includes scoring and quantizing
the index. IOQP made use of all 32 threads for indexing; JASSv2 indexing (from the same CIFF
starting point) was much slower as it is not currently multi-threaded. On the other hand, the
resulting IOQP indexes are between 10 to 25% larger than the equivalent JASSv2 indexes; this
represents an overhead of around 3 GiB on the larger Gov2 collection (10 vs 13 GiB). We aim to
optimize the index space consumption in future work.</p>
      </sec>
      <sec id="sec-4-3">
        <title>4.3. Eficiency and Efectiveness</title>
        <p>
          Our next series of experiments validates the performance and efectiveness of IOQP, as compared
to the JASSv2 system. In particular, we partially replicate the recent work of Mackenzie et al.
[
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] which examines the trade-ofs arising with diferent learned sparse retrieval models on the
MS MARCO passage collection.
        </p>
        <p>
          Table 1 shows the eficiency in terms of mean, median ( 50), and 99 th percentile (99) latency,
as well as the efectiveness in terms of RR@10, across diferent models and configurations on
the MS MARCO dev queries. Considering exhaustive processing, both JASSv2 and IOQP follow
similar trends, with more efective models generally requiring more processing time. One
interesting exception is the DeepCT model; since DeepCT implicitly prunes low impact terms
(by setting their weight to zero during indexing), the postings lists are shorter on average,
resulting in faster retrieval [
          <xref ref-type="bibr" rid="ref40">40</xref>
          ]. In general, IOQP outperforms JASSv2, especially in terms of
high percentile tail latency.
        </p>
        <p>Turning to the approximate results, we again see IOQP outperforming JASSv2 for most of
the metrics. One clear exception is the high 99 latency observed for IOQP on the BM25-T5
index. Failure analysis revealed that this is due to the diference in termination decision logic
between JASSv2 and IOQP; since IOQP terminates processing once at least  postings have been
considered, it is vulnerable to corner cases which can greatly exceed the expected processing
budget. In this specific example, IOQP is processing a single segment of around 8 million
postings corresponding to the term “what,” whereas JASSv2 simply decides to terminate before
processing this block, leading to a large diference in tail latency. It may be worth adapting the
JASSv2 termination logic into IOQP to avoid this issue in the future.</p>
        <p>Table 2 compares the eficiency and efectiveness of both JASSv2 and IOQP for BM25
retrieval on the larger Gov2 document collection. Once again, IOQP outperforms JASSv2 on the
exhaustive queries, while achieving the same efectiveness. For approximate processing, the
systems are much closer; JASSv2 is slightly faster at the mean and median latency, but IOQP
has a lower tail latency.</p>
      </sec>
      <sec id="sec-4-4">
        <title>4.4. Throughput</title>
        <p>Our final experiment aims to measure the performance of IOQP under a more realistic workload,
where multiple incoming queries must be processed as rapidly as possible. We use a load
103
102
101
]
sm100
[
e
iTm103
102
101
100
10
20
50
100 200 500 1000 10
eries Per Second
20
50
U
s
e
r
generator to send queries from the MQT log to the IOQP server, at a uniform rate, via HTTP
requests. The IOQP server uses 16 cores for processing,5 and queries are processed in a first-in,
ifrst-out order. In our experiments, latency is measured over a 300 second window, and the
latency measurements over the first 1,000 requests are discarded as a “warm-up” phase.</p>
        <p>
          Figure 3 shows the query response time for both exhaustive and approximate processing
of incoming queries at diferent uniform rates. The top facet shows the system-side response
time, which represents the total wall-clock time each query spends on the CPU. The bottom
facet shows the user-side response time, which represents the wall-clock time elapsed from the
moment the query is submitted, to the moment the results are returned. While the tolerable
latency is dependent on a number of factors, the most important aspect is that it is measured
on the user-side, since user-side latency is correlated with user experience [
          <xref ref-type="bibr" rid="ref41">41, 42, 43</xref>
          ].
        </p>
        <p>Based on our experimental configuration, exhaustive processing can cope with between
200 and 500 queries per second while maintaining acceptable user-side latency. Similarly,
approximate processing remains acceptable at 500 queries per second, assuming the 99.9 th
percentile tail latency is not a limitation. At higher loads, as the queue of queries grows, queuing
times increase drastically, adding to user-side latency. Nevertheless, system latency is quite
stable as load increases.
5The load generator runs with one thread on the same physical system, sending requests to localhost.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. Perplexing Latency Spikes</title>
      <p>Our final discussion focuses on a somewhat perplexing “bug” we ran into during the development
of IOQP.6 During prototyping, we noticed that while median latency was stable, the extreme
tail latency (99.9 and above) was uncharacteristically high (up to 6× the 50). While this is
plausible for exhaustive processing, where query length or list density can afect latency, we
observed the same behavior with approximate processing (under strict processing budgets).</p>
      <p>To debug this problem, we added a non-blocking “tracing” thread to collect and output
runtime diagnostic information. Interestingly, the introduction of this diagnostic thread modified
program behavior causing the latency spikes to disappear entirely,7 returning performance to
a nominal latency profile. This unsatisfying result led us toward a set of diferent strategies
to diagnose the problem. Turning back to the original binary (without the diagnostics), we
applied some simple per-function instrumentation. The purpose of this instrumentation was to
determine which specific function call in the IOQP codebase was the root cause of the latency
spikes. Surprisingly, we found that no specific function was to blame; the latency spikes were
distributed across all function calls proportional to the program execution time associated with
each given function. At this stage, we concluded the efect was a lower level systems issue
external to IOQP itself, and caused by interactions between IOQP and the operating system
(OS) or hardware.</p>
      <p>After a number of experiments and hypotheses concerning CPU frequency throttling, thermal
issues, and migrations, we narrowed down the cause of the latency spikes to be a memory issue.
The first clue was that enabling transparent huge pages (THP), which allows the operating
system to allocate much larger memory pages than the default page size (2 MiB vs 4 KiB), changed
the pattern and frequency of the latency spikes. Secondly, we could only reliably reproduce the
erroneous behavior on certain systems (our second encounter with non-deterministic diagnostic
outcomes while attempting to find the source of the problem). This strongly indicated that
system configuration, in the hardware or OS, was the likely cause of our latency troubles.</p>
      <p>Detailed profiling experiments with tools such as perf, ftrace, and flamegraph [45]
eventually led us to the root cause of the latency spikes: a large proportion of time was being
spent by the OS kernel inside a function called task_numa_work. This specific function is
responsible for balancing memory pages in NUMA systems, which can invoke memory page
faults and migrations, causing stalls during processing. In our case, translation lookaside bufer
(TLB) flushes were happening routinely when NUMA was enabled.</p>
      <p>Figure 4 demonstrates this efect in isolation, where the same query is processed repeatedly
and the per-query latency is measured with diferent NUMA configurations. Interestingly,
disabling NUMA completely resolved these spikes. Hence, all of the experimentation in Section 4
was conducted with automatic NUMA balancing deactivated. Nevertheless, the lesson here
is that correctly benchmarking software performance is dificult, and care must be taken to
mitigate external efects which can bias measurement [ 46]. NUMA is one such source of bias
that must be explicitly documented in experimental configurations [ 47], and/or considered
during the design of memory access operations [48, 49].
6Interestingly, correspondence with Santhanam et al. [44] revealed that they ran into similar issues during the
development of their PLAID system.
7This is known as a “Heisenbug,” see: en.wikipedia.org/wiki/Heisenbug.
Default
Interleaved
Off
0
1000
2000
3000
4000</p>
      <p>5000</p>
      <p>Iteration</p>
    </sec>
    <sec id="sec-6">
      <title>6. Conclusion</title>
      <p>In this work, we have proposed IOQP, a new impact-ordered query processing system which
is written in Rust. We briefly outlined the implementation of IOQP, including how IOQP
indexes collections and processes queries. Index construction utilized parallelism and the
CIFF interchange format, while the query processing context is one that is in-memory and
on-demand. We compared IOQP to the only current impact-ordered querying system, JASSv2,
in the context of both traditional ranking models, and a set of recent learned sparse rankers,
demonstrating IOQP’s competitive performance. We also experimented with a more realistic
high-volume querying scenario, allowing us to characterize the performance limits of IOQP on
our experimental hardware. Finally, we shared a cautionary tale on the dificulties of accurately
benchmarking high performance software.</p>
      <p>In future work, we plan to optimize the space consumption of IOQP via a more compact
vocabulary representation compared to the simple hash table which is currently used. We
are also interested in conducting a deeper analysis of our novel accumulator table strategy,
and comparing it to alternatives used by JASSv2 and in the literature. Finally, we plan on
comparing IOQP to other systems in our multi-threaded throughput benchmark to gain a better
understanding of the relative performance of diferent indexing and query processing strategies
under a more realistic experimental setting.</p>
      <p>Software The source code, and scripts to replicate our experiments, can be found on the
IOQP repository: github.com/jmmackenzie/ioqp.</p>
    </sec>
    <sec id="sec-7">
      <title>Acknowledgments</title>
      <p>This work was partially supported by the Australian Research Council (projects DP200103136
and DP180102687). We thank Brendan Gregg, Daniel Lemire, Alistair Mofat, and David Gwynne
for providing useful suggestions in tracking down the cause of the latency spikes. We thank the
anonymous reviewers for their helpful suggestions.
[42] S.-W. Hwang, S. Kim, Y. He, S. Elnikety, S. Choi, Prediction and predictability for search
query acceleration, ACM Trans. Web 10 (2016) 19.1–19.28.
[43] J. Dean, L. A. Barroso, The tail at scale, Commun. ACM 56 (2013) 74–80.
[44] K. Santhanam, O. Khattab, C. Potts, M. Zaharia, PLAID: An eficient engine for late
interaction retrieval, arXiv:2205.09707 (2022).
[45] B. Gregg, The flame graph, Commun. ACM 59 (2016) 48–57.
[46] W. Webber, A. Mofat, In search of reliable retrieval experiments, in: Proc. ADCS, 2005,
pp. 26–33.
[47] S. Gog, M. Petri, Optimized succinct data structures for massive data, Soft. Prac. &amp; Exp. 44
(2014) 1287–1314.
[48] D. Hawking, B. Billerbeck, Eficient in-memory, list-based text inversion, in: Proc. ADCS,
2017, pp. 1.5–1.8.
[49] Y. Li, I. Pandis, R. Müller, V. Raman, G. M. Lohman, NUMA-aware algorithms: the case of
data shufling, in: Proc. CIDR, 2013.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Crane</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. S.</given-names>
            <surname>Culpepper</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Lin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Mackenzie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Trotman</surname>
          </string-name>
          ,
          <article-title>A comparison of document-ata-time and score-at-a-time query evaluation</article-title>
          ,
          <source>in: Proc. WSDM</source>
          ,
          <year>2017</year>
          , pp.
          <fpage>201</fpage>
          -
          <lpage>210</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>V. N.</given-names>
            <surname>Anh</surname>
          </string-name>
          , O. de Kretser, A. Mofat,
          <article-title>Vector-space ranking with efective early termination</article-title>
          ,
          <source>in: Proc. SIGIR</source>
          ,
          <year>2001</year>
          , pp.
          <fpage>35</fpage>
          -
          <lpage>42</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>P.</given-names>
            <surname>Yang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Fang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Lin</surname>
          </string-name>
          ,
          <article-title>Anserini: Reproducible ranking baselines using lucene</article-title>
          ,
          <source>J. Data and Information Quality</source>
          <volume>10</volume>
          (
          <year>2018</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>K. M. Risvik</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Chilimbi</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          <string-name>
            <surname>Tan</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Kalyanaraman</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          <string-name>
            <surname>Anderson</surname>
          </string-name>
          ,
          <article-title>Maguro, a system for indexing and searching over very large text collections</article-title>
          ,
          <source>in: Proc. WSDM</source>
          ,
          <year>2013</year>
          , pp.
          <fpage>727</fpage>
          -
          <lpage>736</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A. Z.</given-names>
            <surname>Broder</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Carmel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Herscovici</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Sofer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Zien</surname>
          </string-name>
          ,
          <article-title>Eficient query evaluation using a two-level retrieval process</article-title>
          ,
          <source>in: Proc. CIKM</source>
          ,
          <year>2003</year>
          , pp.
          <fpage>426</fpage>
          -
          <lpage>434</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>H. R.</given-names>
            <surname>Turtle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Flood</surname>
          </string-name>
          ,
          <article-title>Query evaluation: Strategies and optimizations</article-title>
          ,
          <source>Inf. Proc. &amp; Man. 31</source>
          (
          <year>1995</year>
          )
          <fpage>831</fpage>
          -
          <lpage>850</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>J.</given-names>
            <surname>Mackenzie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Trotman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Lin</surname>
          </string-name>
          ,
          <article-title>Wacky weights in learned sparse representations and the revenge of score-at-a-time query evaluation</article-title>
          ,
          <source>arXiv:2110.11540</source>
          (
          <year>2021</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>S. E.</given-names>
            <surname>Robertson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Walker</surname>
          </string-name>
          ,
          <article-title>Some simple efective approximations to the 2-Poisson model for probabilistic weighted retrieval</article-title>
          ,
          <source>in: Proc. SIGIR</source>
          ,
          <year>1994</year>
          , pp.
          <fpage>232</fpage>
          -
          <lpage>241</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>S.</given-names>
            <surname>Robertson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Zaragoza</surname>
          </string-name>
          ,
          <article-title>The probabilistic relevance framework: BM25 and beyond</article-title>
          ,
          <source>Found. Trends Inf. Ret</source>
          .
          <volume>3</volume>
          (
          <year>2009</year>
          )
          <fpage>333</fpage>
          -
          <lpage>389</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Dai</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Callan</surname>
          </string-name>
          ,
          <article-title>Context-aware sentence/passage term importance estimation for first stage retrieval</article-title>
          , arXiv:
          <year>1910</year>
          .
          <volume>10687</volume>
          (
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Dai</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Callan</surname>
          </string-name>
          ,
          <article-title>Context-aware document term weighting for ad-hoc search</article-title>
          ,
          <source>in: Proc. WWW</source>
          ,
          <year>2020</year>
          , pp.
          <fpage>1897</fpage>
          -
          <lpage>1907</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>A.</given-names>
            <surname>Mallia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Khattab</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Suel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Tonellotto</surname>
          </string-name>
          ,
          <article-title>Learning passage impacts for inverted indexes</article-title>
          ,
          <source>in: Proc. SIGIR</source>
          ,
          <year>2021</year>
          , pp.
          <fpage>1723</fpage>
          -
          <lpage>1727</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>R.</given-names>
            <surname>Nogueira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Lin</surname>
          </string-name>
          , From doc2query to docTTTTTquery,
          <source>Technical Report</source>
          ,
          <year>2019</year>
          . URL: https://cs.uwaterloo.ca/~jimmylin/publications/Nogueira_Lin_
          <year>2019</year>
          _docTTTTTquerylatest.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>L.</given-names>
            <surname>Gao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Dai</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Callan</surname>
          </string-name>
          , COIL:
          <article-title>Revisit exact lexical match in information retrieval with contextualized inverted list</article-title>
          ,
          <source>in: Proc. NAACL</source>
          ,
          <year>2021</year>
          , pp.
          <fpage>3030</fpage>
          -
          <lpage>3042</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>J.</given-names>
            <surname>Lin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Ma</surname>
          </string-name>
          ,
          <article-title>A few brief notes on DeepImpact, COIL, and a conceptual framework for information retrieval techniques</article-title>
          ,
          <source>arXiv:2106.14807</source>
          (
          <year>2021</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>S.</given-names>
            <surname>Zhuang</surname>
          </string-name>
          ,
          <string-name>
            <surname>G.</surname>
          </string-name>
          <article-title>Zuccon, TILDE: Term independent likelihood moDEl for passage re-ranking</article-title>
          ,
          <source>in: Proc. SIGIR</source>
          ,
          <year>2021</year>
          , pp.
          <fpage>1483</fpage>
          -
          <lpage>1492</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>S.</given-names>
            <surname>Zhuang</surname>
          </string-name>
          , G. Zuccon,
          <article-title>Fast passage re-ranking with contextualized exact term matching and eficient passage expansion</article-title>
          ,
          <source>arXiv:2108.08513</source>
          (
          <year>2021</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>M.</given-names>
            <surname>Crane</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Trotman</surname>
          </string-name>
          ,
          <string-name>
            <surname>R.</surname>
          </string-name>
          <article-title>O'Keefe, Maintaining discriminatory power in quantized indexes</article-title>
          ,
          <source>in: Proc. CIKM</source>
          ,
          <year>2013</year>
          , pp.
          <fpage>1221</fpage>
          -
          <lpage>1224</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>J.</given-names>
            <surname>Lin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Trotman</surname>
          </string-name>
          ,
          <article-title>Anytime ranking for impact-ordered indexes</article-title>
          ,
          <source>in: Proc. ICTIR</source>
          ,
          <year>2015</year>
          , pp.
          <fpage>301</fpage>
          -
          <lpage>304</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>A.</given-names>
            <surname>Trotman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Crane</surname>
          </string-name>
          ,
          <article-title>Micro- and macro-optimizations of SaaT search</article-title>
          ,
          <source>Soft. Prac. &amp; Exp</source>
          .
          <volume>49</volume>
          (
          <year>2019</year>
          )
          <fpage>942</fpage>
          -
          <lpage>950</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>J.</given-names>
            <surname>Lin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Mackenzie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Kamphuis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Macdonald</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mallia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Siedlaczek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Trotman</surname>
          </string-name>
          , A. de Vries,
          <article-title>Supporting interoperability between open-source search engines with the common index file format</article-title>
          ,
          <source>in: Proc. SIGIR</source>
          ,
          <year>2020</year>
          , pp.
          <fpage>2149</fpage>
          -
          <lpage>2152</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>J.</given-names>
            <surname>Mackenzie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Petri</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mofat</surname>
          </string-name>
          ,
          <article-title>Faster index reordering with bipartite graph partitioning</article-title>
          ,
          <source>in: Proc. SIGIR</source>
          ,
          <year>2021</year>
          , pp.
          <fpage>1910</fpage>
          -
          <lpage>1914</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>D.</given-names>
            <surname>Lemire</surname>
          </string-name>
          , L. Boytsov,
          <article-title>Decoding billions of integers per second through vectorization</article-title>
          ,
          <source>Soft. Prac. &amp; Exp</source>
          .
          <volume>45</volume>
          (
          <year>2015</year>
          )
          <fpage>1</fpage>
          -
          <lpage>29</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>D.</given-names>
            <surname>Lemire</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Boytsov</surname>
          </string-name>
          ,
          <string-name>
            <surname>N.</surname>
          </string-name>
          <article-title>Kurz, SIMD compression and the intersection of sorted integers</article-title>
          ,
          <source>Soft. Prac. &amp; Exp</source>
          .
          <volume>46</volume>
          (
          <year>2016</year>
          )
          <fpage>723</fpage>
          -
          <lpage>749</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>D.</given-names>
            <surname>Lemire</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N. K. C.</given-names>
            <surname>Rupp</surname>
          </string-name>
          , Stream VByte:
          <article-title>Faster byte-oriented integer compression</article-title>
          ,
          <source>Inf. Proc. Lett</source>
          .
          <volume>130</volume>
          (
          <year>2018</year>
          )
          <fpage>1</fpage>
          -
          <lpage>6</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>X.-F.</given-names>
            <surname>Jia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Trotman</surname>
          </string-name>
          ,
          <string-name>
            <surname>R.</surname>
          </string-name>
          <article-title>O'Keefe, Eficient accumulator initialization</article-title>
          ,
          <source>in: Proc. ADCS</source>
          ,
          <year>2010</year>
          , pp.
          <fpage>44</fpage>
          -
          <lpage>51</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>J.</given-names>
            <surname>Mackenzie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Scholer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. S.</given-names>
            <surname>Culpepper</surname>
          </string-name>
          ,
          <article-title>Early termination heuristics for score-at-a-time index traversal</article-title>
          ,
          <source>in: Proc. ADCS</source>
          ,
          <year>2017</year>
          , pp.
          <fpage>8</fpage>
          .
          <fpage>1</fpage>
          -
          <issue>8</issue>
          .8.
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>L.</given-names>
            <surname>Dhulipala</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Kabiljo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Karrer</surname>
          </string-name>
          , G. Ottaviano,
          <string-name>
            <given-names>S.</given-names>
            <surname>Pupyrev</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Shalita</surname>
          </string-name>
          ,
          <article-title>Compressing graphs and indexes with recursive graph bisection</article-title>
          ,
          <source>in: Proc. KDD</source>
          ,
          <year>2016</year>
          , pp.
          <fpage>1535</fpage>
          -
          <lpage>1544</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <given-names>J.</given-names>
            <surname>Mackenzie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mallia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Petri</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. S.</given-names>
            <surname>Culpepper</surname>
          </string-name>
          , T. Suel,
          <article-title>Compressing inverted indexes with recursive graph bisection: A reproducibility study</article-title>
          ,
          <source>in: Proc. ECIR</source>
          ,
          <year>2019</year>
          , pp.
          <fpage>339</fpage>
          -
          <lpage>352</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>J.</given-names>
            <surname>Mackenzie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Petri</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mofat</surname>
          </string-name>
          ,
          <article-title>Anytime ranking on document-ordered indexes</article-title>
          ,
          <source>ACM Trans. Inf. Syst</source>
          .
          <volume>40</volume>
          (
          <year>2022</year>
          )
          <volume>13</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>13</lpage>
          :
          <fpage>32</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          [31]
          <string-name>
            <given-names>P.</given-names>
            <surname>Bajaj</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Campos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Craswell</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Deng</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Gao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Liu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Majumder</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>McNamara</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Mitra</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Nguyen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Rosenberg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Song</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Stoica</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Tiwary</surname>
          </string-name>
          , T. Wang,
          <string-name>
            <surname>MS MARCO: A Human Generated MAchine Reading COmprehension Dataset</surname>
          </string-name>
          , arXiv:
          <fpage>1611</fpage>
          .
          <string-name>
            <surname>09268v3</surname>
          </string-name>
          (
          <year>2018</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          [32]
          <string-name>
            <given-names>T.</given-names>
            <surname>Formal</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Lassance</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Piwowarski</surname>
          </string-name>
          , S. Clinchant, SPLADE v2:
          <article-title>Sparse lexical and expansion model for information retrieval</article-title>
          ,
          <source>arXiv:2109.10086</source>
          (
          <year>2021</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          [33]
          <string-name>
            <given-names>A.</given-names>
            <surname>Trotman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Mackenzie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Parameswaran</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Lin</surname>
          </string-name>
          ,
          <article-title>A common framework for exploring document-at-a-time and score-at-a-time retrieval methods</article-title>
          ,
          <source>in: Proc. SIGIR</source>
          ,
          <year>2022</year>
          , pp.
          <fpage>3229</fpage>
          -
          <lpage>3234</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          [34]
          <string-name>
            <given-names>C. L. A.</given-names>
            <surname>Clarke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Craswell</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Soborof</surname>
          </string-name>
          ,
          <article-title>Overview of the TREC 2004 terabyte track</article-title>
          ,
          <source>in: Proc. TREC</source>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          [35]
          <string-name>
            <given-names>C. L. A.</given-names>
            <surname>Clarke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Scholer</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Soborof</surname>
          </string-name>
          ,
          <article-title>Overview of the TREC 2005 terabyte track</article-title>
          ,
          <source>in: Proc. TREC</source>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          [36]
          <string-name>
            <given-names>S.</given-names>
            <surname>Büttcher</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. L. A.</given-names>
            <surname>Clarke</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Soborof</surname>
          </string-name>
          ,
          <article-title>Overview of the TREC 2006 terabyte track</article-title>
          ,
          <source>in: Proc. TREC</source>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref37">
        <mixed-citation>
          [37]
          <string-name>
            <given-names>J.</given-names>
            <surname>Allan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Carterette</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. A.</given-names>
            <surname>Aslam</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Pavlu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Dachev</surname>
          </string-name>
          , E. Kanoulas,
          <article-title>Million query track 2007 overview</article-title>
          , in
          <source>: Proc. TREC</source>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref38">
        <mixed-citation>
          [38]
          <string-name>
            <given-names>J.</given-names>
            <surname>Allan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. A.</given-names>
            <surname>Aslam</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Carterette</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Pavlu</surname>
          </string-name>
          , E. Kanoulas,
          <article-title>Million query track 2008 overview</article-title>
          , in
          <source>: Proc. TREC</source>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref39">
        <mixed-citation>
          [39]
          <string-name>
            <given-names>B.</given-names>
            <surname>Carterette</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Pavlu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Fang</surname>
          </string-name>
          , E. Kanoulas,
          <article-title>Million query track 2009 overview</article-title>
          , in
          <source>: Proc. TREC</source>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref40">
        <mixed-citation>
          [40]
          <string-name>
            <given-names>J.</given-names>
            <surname>Mackenzie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Dai</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Gallagher</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Callan</surname>
          </string-name>
          ,
          <article-title>Eficiency implications of term weighting for passage retrieval</article-title>
          ,
          <source>in: Proc. SIGIR</source>
          ,
          <year>2020</year>
          , pp.
          <fpage>1821</fpage>
          -
          <lpage>1824</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref41">
        <mixed-citation>
          [41]
          <string-name>
            <given-names>X.</given-names>
            <surname>Bai</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Arapakis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B. B.</given-names>
            <surname>Cambazoglu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Freire</surname>
          </string-name>
          ,
          <article-title>Understanding and leveraging the impact of response latency on user behaviour in web search</article-title>
          ,
          <source>ACM Trans. Inf. Syst</source>
          .
          <volume>36</volume>
          (
          <year>2017</year>
          )
          <fpage>1</fpage>
          -
          <lpage>42</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>