Skip to content

feat(whoosh): implement skip list for document lookup#129

Open
Predd0o wants to merge 4 commits intoSygil-Dev:mainfrom
matheusvir:optimization/skiplist-document-lookup
Open

feat(whoosh): implement skip list for document lookup#129
Predd0o wants to merge 4 commits intoSygil-Dev:mainfrom
matheusvir:optimization/skiplist-document-lookup

Conversation

@Predd0o
Copy link

@Predd0o Predd0o commented Mar 3, 2026

O que foi feito

O método skip_to() atual do ListMatcher usa uma varredura linear
para avançar nas posting lists (O(n)), o que se torna custoso em
consultas AND onde o skip_to() é chamado repetidamente.

Esta mudança introduz uma Skip List em um novo arquivo skiplist.py
com duas classes:

  • SkipNode: representa um nó armazenando o ID do documento e ponteiros
    forward para cada nível. Usa __slots__ para minimizar uso de memória.
  • SkipList: constrói todos os níveis em uma única passagem O(n) e
    implementa o skip_to() em O(log n) descendo dos níveis mais altos.

Uma nova classe SkipListMatcher herda do ListMatcher e sobrescreve
apenas o skip_to(), usando a SkipList para localizar o doc_id alvo
em O(log n) e bisect_left para encontrar o índice correspondente.
Todos os outros métodos (next, id, weight, score, all_ids, etc.)
permanecem inalterados.

IntersectionMatcher._find_next() não precisou de alterações — ao
substituir SkipListMatcher no lugar de ListMatcher, a otimização
é propagada automaticamente. Consultas AND sobre duas listas de N
documentos passam de O(n) para O(k log n), onde k é o número de
resultados.

Como testar

Rodar a suite de testes existente para verificar que nada foi quebrado:

pip install -e .
pytest

Issue relacionada

Closes matheusvir/eda-oss-performance#19

Predd0o and others added 2 commits March 11, 2026 22:28
Co-authored-by: Matheus Virgolino <matheus.virgolino.abilio.da.silva@ccc.ufcg.edu.br>
Co-authored-by: Manoel Netto <manoel.da.nobrega.eustaqueo.netto@ccc.ufcg.edu.br>
Co-authored-by: Pedro <pedroalmeida1896@gmail.com>
Co-authored-by: Lucaslg7 <lucasmoizinholg7@gmail.com>
Co-authored-by: RailtonDantas <railtondantas.code@gmail.com>
Co-authored-by: João Pereira <joao.pereira.de.oliveira@ccc.ufcg.edu.br>
Co-authored-by: Matheus Virgolino <matheus.virgolino.abilio.da.silva@ccc.ufcg.edu.br>
Co-authored-by: Manoel Netto <manoel.da.nobrega.eustaqueo.netto@ccc.ufcg.edu.br>
Co-authored-by: Pedro <pedroalmeida1896@gmail.com>
Co-authored-by: Lucaslg7 <lucasmoizinholg7@gmail.com>
Co-authored-by: RailtonDantas <railtondantas.code@gmail.com>
Co-authored-by: João Pereira <joao.pereira.de.oliveira@ccc.ufcg.edu.br>
@matheusvir matheusvir force-pushed the optimization/skiplist-document-lookup branch 2 times, most recently from f3c6934 to b34f6ad Compare March 12, 2026 01:38
@sonarqubecloud
Copy link

Quality Gate Failed Quality Gate failed

Failed conditions
E Reliability Rating on New Code (required ≥ C)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[IMP] Whoosh: Implementar Skip Lists para cruzamento de listas invertidas

1 participant