Search using Whoosh

We will use Whoosh, a search engine with Python, to retrieve a few candidates. The search engine is already doing some parsing, but with a more complex problem we can use it for a few fields.


In [12]:
from retrieve.search import *

This will be our canonical database for the addresses:


In [20]:
doc1 = {
    'street': 'XV de novembro',
    'number': 123,
    'complement': 'bloco 22',
    'cep': '02837-223',
    'city': 'São Paulo'
}
doc2 = {
    'street': 'XV de piracicaba',
    'number': 123,
    'cep': '02833-023',
    'city': 'São Paulo'
}

doc3 = {
    'street': 'Grande marcha de novembro',
    'number': 123,
    'complement': 'bloco 22',
    'cep': '02833-023',
    'city': 'São Paulo'
}

doc4 = {
    'street': 'XV de novembro',
    'number': 123,
    'complement': 'bloco 23 A',
    'cep': '02837-223',
    'city': 'São Paulo'
}

All documents that we have available:


In [23]:
for doc in all_documents(idx):
    print(doc)


{'number': 123, 'city': 'São Paulo', 'cep': '02833-023', 'complement': 'bloco 22', 'street': 'pindamonhangaba'}
{'number': 123, 'city': 'São Paulo', 'complement': 'bloco 22', 'cep': '02833-023', 'street': 'pindamonhangaba'}
{'number': 123, 'city': 'São Paulo', 'cep': '02833-023', 'complement': 'bloco 22', 'street': 'pindamonhangaba'}
{'number': 123, 'city': 'São Paulo', 'complement': 'bloco 22', 'cep': '02837-223', 'street': 'XV de novembro'}
{'number': 123, 'city': 'São Paulo', 'cep': '02833-023', 'street': 'XV de piracicaba'}
{'number': 123, 'city': 'São Paulo', 'complement': 'bloco 22', 'cep': '02833-023', 'street': 'Grande marcha de novembro'}
{'number': 123, 'city': 'São Paulo', 'complement': 'bloco 23 A', 'cep': '02837-223', 'street': 'XV de novembro'}

What happens when we search for a string, like novembro?


In [22]:
schema = create_schema()
idx = create_index(schema, 'indexdir')
add_documents([doc4], idx)
results = search('novembro', 'street', idx)
print(results)


[9, 11, 12]
[{'number': 123, 'city': 'São Paulo', 'cep': '02837-223', 'complement': 'bloco 22', 'street': 'XV de novembro'}, {'number': 123, 'city': 'São Paulo', 'cep': '02837-223', 'complement': 'bloco 23 A', 'street': 'XV de novembro'}, {'number': 123, 'city': 'São Paulo', 'cep': '02833-023', 'complement': 'bloco 22', 'street': 'Grande marcha de novembro'}]

In [ ]: