A lightweight Boolean Query Search Engine implemented in Python.
Text Query Engineμ μ¬λ¬ κ°μ ν μ€νΈ λ¬Έμλ₯Ό λΉ λ₯΄κ² κ²μνκΈ° μν Boolean Query κΈ°λ° κ²μ μμ§μ λλ€.
λ§€λ² λͺ¨λ λ¬Έμλ₯Ό μμ°¨μ μΌλ‘ κ²μνλ λμ , λ¬Έμλ₯Ό 미리 μ μ²λ¦¬νμ¬ μμμΈ(Inverted Index) μ μμ±ν ν μ΄λ₯Ό μ΄μ©ν΄ λΉ λ₯΄κ² κ²μν©λλ€.
λν λ³κ²½λ λ¬Έμλ§ λ€μ μΈλ±μ±νλ μ¦λΆ μΈλ±μ±(Incremental Indexing) μ μ§μνμ¬ λλμ λ¬Έμμμλ ν¨μ¨μ μΌλ‘ λμν©λλ€.
- μ¬λ¬ κ°μ ν μ€νΈ λ¬Έμ μΈλ±μ±
- μ¦λΆ μΈλ±μ±(λ³κ²½λ λ¬Έμλ§ μ¬μΈλ±μ±)
- Boolean Query κ²μ
- AND (
&&) - OR (
||) - NOT (
!) - κ΄νΈ (
())
- AND (
- νμΌλͺ , λΌμΈ λ²νΈ, μλ³Έ λ¬Έμ₯ μΆλ ₯
- Stopword μ κ±°
- μ μ§λ³΄μκ° μ¬μ΄ λͺ¨λ ꡬ쑰
text-query-engine/
β
βββ main.py # νλ‘κ·Έλ¨ μμμ
βββ build_index.py # μΈλ±μ€ μμ± λ° μ
λ°μ΄νΈ
βββ search.py # Boolean Query κ²μ
βββ indexer.py # μμμΈ μμ±
βββ storage.py # λ°μ΄ν° μ μ₯/λΆλ¬μ€κΈ°
βββ utils.py # μ μ²λ¦¬ μ νΈλ¦¬ν°
βββ stopwords.py # λΆμ©μ΄ λͺ©λ‘
β
βββ documents/ # μλ³Έ λ¬Έμ
β
βββ index/
βββ master.pkl # μ 체 μμμΈ
βββ metadata.pkl # νμΌ λ©νλ°μ΄ν°
βββ files/ # λ¬Έμλ³ μΈλ±μ€
λ¬Έμλ₯Ό μ½μ ν λ€μ κ³Όμ μ μνν©λλ€.
λ¬Έμ μ½κΈ°
β
βΌ
μλ¬Έμ λ³ν
β
βΌ
νΉμλ¬Έμ μ κ±°
β
βΌ
ν ν°ν(Tokenize)
β
βΌ
λΆμ©μ΄ μ κ±°
β
βΌ
μμμΈ μμ±
β
βΌ
PKL νμΌ μ μ₯
μ¬μ©μκ° κ²μμ΄λ₯Ό μ λ ₯νλ©΄
(apple || banana) && !orange
λ€μ κ³Όμ μ μνν©λλ€.
- Query Tokenize
- Boolean μ°μ° κ³μ°
- μμμΈ κ²μ
- κ²°κ³Ό μΆλ ₯
μΆλ ₯ μμ
book1.txt
(3) Apple is a fruit.
book2.txt
(15) Banana and apple are popular.
μΌλ°μ μΈ λ¬Έμλ
book1
apple banana
book2
banana orange
μ²λΌ μ μ₯λ©λλ€.
νμ§λ§ κ²μ μμ§μμλ
apple
β (book1, line 1)
banana
β (book1, line 1)
β (book2, line 1)
orange
β (book2, line 1)
μ²λΌ λ¨μ΄ β λ¬Έμ μμΉ ννλ‘ μ μ₯ν©λλ€.
μ΄λ₯Ό μμμΈ(Inverted Index) μ΄λΌκ³ νλ©° κ²μ μλλ₯Ό ν¬κ² ν₯μμν΅λλ€.
νλ‘κ·Έλ¨μ λ³κ²½λ λ¬Έμλ§ λ€μ μΈλ±μ±ν©λλ€.
μλ₯Ό λ€μ΄
book1.txt λ³κ²½ μμ
book2.txt μμ λ¨
book3.txt λ³κ²½ μμ
μ΄λΌλ©΄
book2.txt
λ§ λ€μ μΈλ±μ±ν©λλ€.
μ΄λ₯Ό ν΅ν΄ λΆνμν μμ μ μ€μ΄κ³ μ€ν μκ°μ λ¨μΆν©λλ€.
μ§μ μ°μ°μ
| μ°μ°μ | μ€λͺ |
|---|---|
| && | AND |
| || | OR |
| ! | NOT |
| () | κ΄νΈ |
μμ
apple
apple && banana
apple || orange
apple && !banana
(apple || banana) && !orange
νλ‘κ·Έλ¨μ μμμ μ λλ€.
λ©λ΄λ₯Ό μΆλ ₯νκ³ κ° κΈ°λ₯μ μ€νν©λλ€.
documents ν΄λλ₯Ό κ²μ¬νμ¬
- μ λ¬Έμ
- μμ λ λ¬Έμ
- μμ λ λ¬Έμ
λ₯Ό νμΈνκ³ μΈλ±μ€λ₯Ό κ°±μ ν©λλ€.
λ¬Έμλ₯Ό μ½κ³
- μ μ²λ¦¬
- λ¨μ΄ λΉλ κ³μ°
- μμμΈ μμ±
μ μνν©λλ€.
Boolean Queryλ₯Ό κ³μ°νμ¬
- κ²μ
- κ²°κ³Ό μΆλ ₯
μ λ΄λΉν©λλ€.
PKL νμΌ μ μ₯ λ° λ‘λλ₯Ό λ΄λΉν©λλ€.
νλ‘μ νΈ μ 체μμ μ¬μ©νλ
- μ μ²λ¦¬
- ν ν°ν
- νμΌλͺ λ³ν
λ±μ κ³΅ν΅ ν¨μλ₯Ό μ 곡ν©λλ€.
κ²μ μ±λ₯ ν₯μμ μν΄ λΆνμν λ¨μ΄λ₯Ό μ κ±°νλ Stopword λͺ©λ‘μ λλ€.
μΈλ±μ€ μμ±
python build_index.pyκ²μ μ€ν
python search.pyλλ
python main.py- Phrase Query
- Wildcard Search
- TF-IDF Ranking
- BM25 Ranking
- PDF κ²μ
- DOCX κ²μ
- μΉ μΈν°νμ΄μ€
- λ©ν°μ€λ λ μΈλ±μ±
Text Query Engine is a lightweight Boolean Query Search Engine written in Python.
Instead of scanning every document for every search, the engine preprocesses documents once, builds an Inverted Index, and performs fast searches using indexed data.
It also supports Incremental Indexing, allowing only newly added or modified documents to be re-indexed.
- Index multiple text documents
- Incremental indexing
- Boolean Query search
- AND (
&&) - OR (
||) - NOT (
!) - Parentheses (
())
- AND (
- Display filename, line number, and original sentence
- Stopword removal
- Modular project architecture
text-query-engine/
β
βββ main.py
βββ build_index.py
βββ search.py
βββ indexer.py
βββ storage.py
βββ utils.py
βββ stopwords.py
β
βββ documents/
β
βββ index/
βββ master.pkl
βββ metadata.pkl
βββ files/
Document
β
βΌ
Normalize text
β
βΌ
Tokenize
β
βΌ
Remove stopwords
β
βΌ
Build inverted index
β
βΌ
Save document index
Example query
(apple || banana) && !orange
The engine
- Tokenizes the query
- Evaluates Boolean operators
- Searches the master index
- Displays matching results
Instead of storing
book1
apple banana
book2
banana orange
the engine stores
apple
β (book1, line 1)
banana
β (book1, line 1)
β (book2, line 1)
orange
β (book2, line 1)
This structure enables much faster searching.
- Phrase Query
- Wildcard Search
- TF-IDF
- BM25
- PDF Search
- DOCX Search
- Web Interface
- Multi-threaded Indexing
Developed as a course project for learning Information Retrieval and Search Engine fundamentals.