{"id":13423658,"url":"https://github.com/pisa-engine/pisa","last_synced_at":"2026-01-16T13:34:26.258Z","repository":{"id":40643653,"uuid":"150449350","full_name":"pisa-engine/pisa","owner":"pisa-engine","description":"PISA: Performant Indexes and Search for Academia","archived":false,"fork":false,"pushed_at":"2025-12-30T02:24:45.000Z","size":37242,"stargazers_count":1044,"open_issues_count":66,"forks_count":72,"subscribers_count":23,"default_branch":"main","last_synced_at":"2026-01-02T11:41:12.857Z","etag":null,"topics":["information-retrieval","inverted-index","search","search-engine"],"latest_commit_sha":null,"homepage":"https://pisa-engine.github.io/pisa/book","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pisa-engine.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":"pisa","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2018-09-26T15:32:52.000Z","updated_at":"2025-12-30T02:24:50.000Z","dependencies_parsed_at":"2025-12-30T12:03:04.751Z","dependency_job_id":null,"html_url":"https://github.com/pisa-engine/pisa","commit_stats":{"total_commits":558,"total_committers":12,"mean_commits":46.5,"dds":0.4390681003584229,"last_synced_commit":"42e5f3f6a1c61f234023df60513e923d7991b7e4"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/pisa-engine/pisa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pisa-engine%2Fpisa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pisa-engine%2Fpisa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pisa-engine%2Fpisa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pisa-engine%2Fpisa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pisa-engine","download_url":"https://codeload.github.com/pisa-engine/pisa/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pisa-engine%2Fpisa/sbom","scorecard":{"id":735475,"data":{"date":"2025-08-11","repo":{"name":"github.com/pisa-engine/pisa","commit":"07d63477462e68cfeb18f624278df545519284c4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.8,"checks":[{"name":"Maintained","score":10,"reason":"22 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":9,"reason":"Found 11/12 approved changesets -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/commit.yml:1","Warn: no topLevel permission defined: .github/workflows/docker.yml:1","Warn: no topLevel permission defined: .github/workflows/pr.yml:1","Warn: no topLevel permission defined: .github/workflows/trunk.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/commit.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/pisa-engine/pisa/commit.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/commit.yml:84: update your workflow using https://app.stepsecurity.io/secureworkflow/pisa-engine/pisa/commit.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/commit.yml:92: update your workflow using https://app.stepsecurity.io/secureworkflow/pisa-engine/pisa/commit.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/commit.yml:108: update your workflow using https://app.stepsecurity.io/secureworkflow/pisa-engine/pisa/commit.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/commit.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/pisa-engine/pisa/commit.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/pisa-engine/pisa/pr.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/trunk.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/pisa-engine/pisa/trunk.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/trunk.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/pisa-engine/pisa/trunk.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/trunk.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/pisa-engine/pisa/trunk.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:22: pin your Docker image by updating debian:bullseye to debian:bullseye@sha256:8ec25a9073e8cc89a184a6256e219828196d75203375a8ad4f0977f3011f2115","Warn: containerImage not pinned by hash: test/docker/benchmark/Dockerfile:1: pin your Docker image by updating gcc:13 to gcc:13@sha256:a362f64db7ae360eefbcc1b4b5db363764e40676dee7c54bac3720ecb009e5c9","Warn: containerImage not pinned by hash: test/docker/clang11/Dockerfile:1: pin your Docker image by updating debian:bullseye to debian:bullseye@sha256:8ec25a9073e8cc89a184a6256e219828196d75203375a8ad4f0977f3011f2115","Warn: containerImage not pinned by hash: test/docker/clang12/Dockerfile:1: pin your Docker image by updating debian:bullseye to debian:bullseye@sha256:8ec25a9073e8cc89a184a6256e219828196d75203375a8ad4f0977f3011f2115","Warn: containerImage not pinned by hash: test/docker/clang15/Dockerfile:1: pin your Docker image by updating debian:bullseye to debian:bullseye@sha256:8ec25a9073e8cc89a184a6256e219828196d75203375a8ad4f0977f3011f2115","Warn: containerImage not pinned by hash: test/docker/clang16/Dockerfile:1: pin your Docker image by updating debian:bullseye to debian:bullseye@sha256:8ec25a9073e8cc89a184a6256e219828196d75203375a8ad4f0977f3011f2115","Warn: containerImage not pinned by hash: test/docker/clang17/Dockerfile:1: pin your Docker image by updating debian:bullseye to debian:bullseye@sha256:8ec25a9073e8cc89a184a6256e219828196d75203375a8ad4f0977f3011f2115","Warn: containerImage not pinned by hash: test/docker/clang18/Dockerfile:1: pin your Docker image by updating debian:bullseye to debian:bullseye@sha256:8ec25a9073e8cc89a184a6256e219828196d75203375a8ad4f0977f3011f2115","Warn: containerImage not pinned by hash: test/docker/clang19/Dockerfile:1: pin your Docker image by updating debian:bullseye to debian:bullseye@sha256:8ec25a9073e8cc89a184a6256e219828196d75203375a8ad4f0977f3011f2115","Warn: containerImage not pinned by hash: test/docker/coverage/Dockerfile:1: pin your Docker image by updating gcc:13 to gcc:13@sha256:a362f64db7ae360eefbcc1b4b5db363764e40676dee7c54bac3720ecb009e5c9","Warn: containerImage not pinned by hash: test/docker/gcc10/Dockerfile:1: pin your Docker image by updating gcc:10 to gcc:10@sha256:19b31d0b2b263047b173e4e253d91f199d99c082973f13604d2913252c13309e","Warn: containerImage not pinned by hash: test/docker/gcc11/Dockerfile:1: pin your Docker image by updating gcc:11 to gcc:11@sha256:63aaebc5db8930a70241051619cba77781a5466fb3e4dc99d2ff3b752cb715f2","Warn: containerImage not pinned by hash: test/docker/gcc12/Dockerfile:1: pin your Docker image by updating gcc:12 to gcc:12@sha256:f553fb08d8863f0ea39895acad4f0808f1d413ee42f27c6d6695a56fc7020c1d","Warn: containerImage not pinned by hash: test/docker/gcc13/Dockerfile:1: pin your Docker image by updating gcc:13 to gcc:13@sha256:a362f64db7ae360eefbcc1b4b5db363764e40676dee7c54bac3720ecb009e5c9","Warn: containerImage not pinned by hash: test/docker/gcc14/Dockerfile:1: pin your Docker image by updating gcc:14 to gcc:14@sha256:495ed3a3b4b7f00e9dd6505e453d59bed278c26a87be9a1b756dce53155819c8","Warn: containerImage not pinned by hash: test/docker/gcc9/Dockerfile:1: pin your Docker image by updating gcc:9 to gcc:9@sha256:a9aba821155db99d0800920f27bf3a94ead6f9dedf330a2e2ce38da73f5370e3","Warn: containerImage not pinned by hash: test/docker/headers/Dockerfile:1: pin your Docker image by updating gcc:13 to gcc:13@sha256:a362f64db7ae360eefbcc1b4b5db363764e40676dee7c54bac3720ecb009e5c9","Warn: containerImage not pinned by hash: test/docker/system-deps/Dockerfile:1: pin your Docker image by updating gcc:13 to gcc:13@sha256:a362f64db7ae360eefbcc1b4b5db363764e40676dee7c54bac3720ecb009e5c9","Warn: containerImage not pinned by hash: test/docker/tidy/Dockerfile:1: pin your Docker image by updating debian:bullseye to debian:bullseye@sha256:8ec25a9073e8cc89a184a6256e219828196d75203375a8ad4f0977f3011f2115","Warn: containerImage not pinned by hash: test/docker/tutorial/Dockerfile:1","Warn: containerImage not pinned by hash: test/docker/tutorial/Dockerfile:54","Warn: containerImage not pinned by hash: test/docker/tutorial/Dockerfile:61: pin your Docker image by updating debian:bookworm to debian:bookworm@sha256:731dd1380d6a8d170a695dbeb17fe0eade0e1c29f654cf0a3a07f372191c3f4b","Warn: downloadThenRun not pinned by hash: test/docker/tutorial/Dockerfile:79","Warn: pipCommand not pinned by hash: .github/workflows/commit.yml:89","Warn: downloadThenRun not pinned by hash: .github/workflows/commit.yml:100","Info:   0 out of   9 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  23 containerImage dependencies pinned","Info:   0 out of   2 downloadThenRun dependencies pinned","Info:   0 out of   1 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-22T15:40:31.749Z","repository_id":40643653,"created_at":"2025-08-22T15:40:31.749Z","updated_at":"2025-08-22T15:40:31.749Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479033,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["information-retrieval","inverted-index","search","search-engine"],"created_at":"2024-07-31T00:00:40.020Z","updated_at":"2026-01-16T13:34:26.232Z","avatar_url":"https://github.com/pisa-engine.png","language":"C++","funding_links":["https://patreon.com/pisa"],"categories":["C++","Texts","search-engine","Vector Indexing Libraries"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"https://pisa-engine.github.io/images/logo250.png\" width=\"250px\"\u003e\u003c/p\u003e\n\n# PISA: Performant Indexes and Search for Academia\n\n![Build and test](https://github.com/pisa-engine/pisa/workflows/Build%20and%20test/badge.svg)\n![clang-tidy](https://github.com/pisa-engine/pisa/workflows/clang-tidy/badge.svg)\n[![codecov](https://codecov.io/gh/pisa-engine/pisa/branch/master/graph/badge.svg)](https://codecov.io/gh/pisa-engine/pisa)\n\n\n[![GitHub issues](https://img.shields.io/github/issues/pisa-engine/pisa.svg)](https://github.com/pisa-engine/pisa/issues)\n[![GitHub forks](https://img.shields.io/github/forks/pisa-engine/pisa.svg)](https://github.com/pisa-engine/pisa/network)\n[![GitHub stars](https://img.shields.io/github/stars/pisa-engine/pisa.svg)](https://github.com/pisa-engine/pisa/stargazers)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/pisa-engine/pisa/pulls)\n[![DOI](https://zenodo.org/badge/150449350.svg)](https://zenodo.org/badge/latestdoi/150449350)\n\n## Join us on Slack\nGet in touch via Slack: [![Slack](https://img.shields.io/badge/slack-join-blue.svg)](https://join.slack.com/t/pisa-engine/shared_invite/zt-dbxrm1mf-RtQMZTqxxlhOJsv3GHUErw)\n\n## Overview\n\nPISA is a text search engine able to run on large-scale collections of documents. It allows researchers to experiment with state-of-the-art techniques, allowing an ideal environment for rapid development.\n\nSome features of PISA are listed below:\n\n* Written in C++ for performance;\n* Parsing, Indexing, and Sharding capabilities;\n* Many index compression methods implemented;\n* Many query processing algorithms implemented;\n* Implementation of document reordering;\n* Free and open-source with permissive license;\n\n## About PISA\n\n### What is PISA?\nPISA is a text search engine, though the \"PISA Project\" is a\nset of tools that help experiment with indexing and query processing.\nGiven a text collection, PISA can build an *inverted index* over this corpus,\nallowing the corpus to be searched. The inverted index, put simply, is an efficient\ndata structure that represents the document corpus by storing a list of documents\nfor each unique term (see [here](https://en.wikipedia.org/wiki/Search_engine_indexing#Inverted_indices)).\nAt query time, PISA stores its index in main memory for rapid retrieval.\n\n#### What does that all mean?\nIn very simple terms, PISA is a text search engine. Starting with a corpus of\ndocuments, for example, Wikipedia, PISA can build an *inverted index* which allows us\nto rapidly search the Wikipedia collection. At the most basic level, Boolean\n`AND` and `OR` queries are supported. Imagine we wanted to find all of the\nWikipedia documents matching the query *\"oolong tea\"* - we could run a\nBoolean conjunction (*oolong* `AND` *tea*). We might instead be interested in\nfinding documents containing either *oolong* or *tea* (or both), in which case\nwe can run a Boolean disjunction (*oolong* `OR` *tea*). \n\nBeyond simple Boolean matching, as discussed above, we can actually *rank*\ndocuments. Without going into details, documents are ranked by functions that\nassume the more *rare* a term is, the more *important* the word is. These\nrankers also assume that the more often a word appears in a document, the\nmore likely the document is to be about that word. Finally, longer documents\ncontain more words, and are therefore more likely to get higher scores than\nshorter documents, so normalization is conducted to ensure all documents are\ntreated equally. The interested reader may wish to examine the [TF/IDF](https://en.wikipedia.org/wiki/Tf%E2%80%93idf)\nWikipedia article to learn more about this method of ranking.\n\n#### Search vs pattern matching\nThis is not the same type of search `grep` for example. This is more closely\nrelated to the popular Lucene search engine, though we don't currently support \nas many query types as Lucene. As discussed previously, the main underlying data\nstructure in PISA is the *inverted index*. The inverted index stores, for each\nterm, a list of documents that contain that term. These lists can be rapidly\ntraversed to find documents that match the query terms, and these documents can\nthen be scored, ranked, and returned to the user.\n\n#### Who should use PISA?\nThe primary use-case for PISA is to conduct experiments to further the understanding\nof the field of Information Retrieval (IR). \nWithin the field of IR, there are various\nimportant research directions that are focused on, from improving results\nquality (effectiveness), to improving the scalability and efficiency of search\nsystems. PISA is focused mostly on the scalability and efficiency side of\nIR research, and is why PISA stands for \"Performant Indexes and Search for Academia\". \nIn short, PISA is a platform for developing new innovations in efficient search.\n\n#### What if I just want to play with a search engine?\nWhile PISA is focused on being a base for experimentation, it is also perfectly\nsuitable for use as a simple general purpose indexing and search system.\n\n#### What sort of scale can PISA handle?\nPISA can handle large text collections. For example, PISA can easily index the\nClueWeb09B or ClueWeb12B corpora, which each contain over 50 million web\ndocuments and close to 500 GiB of *compressed* textual data, resulting in \nindexes that are in the range of 10-40 GiB, depending on the compression\ncodec used. These indexes, depending on some details, can be built from scratch\nin around 10-20 hours. \nIn addition, larger collections can be handled via *index sharding*\nwhich breaks large corpora into smaller subsets (shards).\nWe do note, however, that PISA is an *in-memory* system, which aims to serve\nqueries based on an index residing entirely in main memory. As such, the possible\nscale will be limited by main memory. \n\n#### How fast is PISA, really?\nA few recent works have benchmarked PISA. For example, \n*An Experimental Study of Index Compression and DAAT Query Processing Methods*\nby Antonio Mallia, Michal Siedlaczek, and Torsten Suel, which appeared in\nECIR 2019, showed PISA to be capable of returning the top 10 and top 1000\ndocuments with an average latency in the range of 10-40 and 20-50 *milliseconds*\nrespectively, on a collection containing 50 million web documents. \n\nPISA is also included in Tantivy's [search engine benchmark game](https://tantivy-search.github.io/bench/), which also\nhas [Tantivy](https://github.com/tantivy-search), [Lucene](https://lucene.apache.org/), and [Rucene](https://github.com/zhihu/rucene) as competitors.\n\n### How did PISA begin?\nPISA is a fork of the [ds2i](https://github.com/ot/ds2i/) project started by [Giuseppe Ottaviano](https://github.com/ot).\nThe ds2i project contained the source code for a number of important efficiency\ninnovations in IR, including the \"Partitioned Elias-Fano\" compression method.\n\n\n### Getting Started\nFor those interested in working with PISA, we suggest examining the following\nresources:\n\n1. The [Open Source Information Retrieval Replicability Challenge (OSIRRC) paper describing PISA](http://ceur-ws.org/Vol-2409/docker08.pdf), including end-to-end experimentation.\n2. The accompanying [Docker image](https://github.com/osirrc/pisa-docker) which allows the experiments from above to be replicated.\n3. The [documentation](https://pisa-engine.github.io/pisa/book).\n4. Drop in to our [Slack channel](https://join.slack.com/t/pisa-engine/shared_invite/zt-dbxrm1mf-RtQMZTqxxlhOJsv3GHUErw) and say hi!\n\n## Contributing\n\nIf you want to get involved with PISA, please check out our [Contributing](https://github.com/pisa-engine/pisa/blob/master/.github/CONTRIBUTING.md) page.\n\n\n## Reference\n\nIf you use PISA in a research paper, please cite the following reference:\n```\n@inproceedings{MSMS2019,\n  author    = {Antonio Mallia and Michal Siedlaczek and Joel Mackenzie and Torsten Suel},\n  title     = {{PISA:} Performant Indexes and Search for Academia},\n  booktitle = {Proceedings of the Open-Source {IR} Replicability Challenge co-located\n               with 42nd International {ACM} {SIGIR} Conference on Research and Development\n               in Information Retrieval, OSIRRC@SIGIR 2019, Paris, France, July 25,\n               2019.},\n  pages     = {50--56},\n  year      = {2019},\n  url       = {http://ceur-ws.org/Vol-2409/docker08.pdf}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpisa-engine%2Fpisa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpisa-engine%2Fpisa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpisa-engine%2Fpisa/lists"}