API de pesquisa do Google App Engine
Ao consultar um índice de pesquisa na versão Python doAPI de pesquisa do GAE, qual é a melhor prática para pesquisar itens em que os documentos com palavras correspondem ao título são retornados pela primeira vez e, em seguida, os documentos em que as palavras correspondem ao corpo?
Por exemplo, dado:
body = """This is the body of the document,
with a set of words"""
my_document = search.Document(
fields=[
search.TextField(name='title', value='A Set Of Words'),
search.TextField(name='body', value=body),
])
Se for possível, como se pode realizar uma pesquisa em um índice deDocument
s do formulário acima com os resultados retornados nessa prioridade, em que a frase que está sendo pesquisada está na variávelqs
:
title
corresponde aoqs
; entãoDocumentos cujo corpo corresponde aoqs
palavras.Parece que a solução correta é usar umMatchScorer
, mas eu posso estar fora de questão, já que não usei essa funcionalidade de pesquisa antes. Não está claro na documentação como usar oMatchScorer
, mas presumo que uma subclasse e sobrecarregue alguma função - mas como isso não está documentado, e eu não investiguei o código, não posso dizer com certeza.
Há algo aqui que estou perdendo, ou essa é a estratégia correta? Eu perdi onde esse tipo de coisa é documentado?
Apenas para clareza, aqui está um exemplo mais elaborado do resultado desejado:
documents = [
dict(title="Alpha", body="A"), # "Alpha"
dict(title="Beta", body="B Two"), # "Beta"
dict(title="Alpha Two", body="A"), # "Alpha2"
]
for doc in documents:
search.Document(
fields=[
search.TextField(name="title", value=doc.title),
search.TextField(name="body", value=doc.body),
]
)
index.put(doc) # for some search.Index
# Then when we search, we search the Title and Body.
index.search("Alpha")
# returns [Alpha, Alpha2]
# Results where the search is found in the Title are given higher weight.
index.search("Two")
# returns [Alpha2, Beta] -- note Alpha2 has 'Two' in the title.