在GAE SearchAPI的Python版本中查询搜索索引时,最好的搜索方式是:首先搜索单词与标题匹配的文档,然后再搜索与正文匹配的文档的项目?
例如给出:
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), ])
如果可能,如何Document对上述形式的s的索引执行搜索,并以该优先级返回结果,其中要搜索的短语在变量中qs:
Document
qs
title
似乎正确的解决方案是使用MatchScorer,但是由于我之前没有使用过此搜索功能,因此我可能对此不以为然。从文档中尚不清楚如何使用MatchScorer,但是我认为一个子类会重载某些函数- 但是由于没有文档说明,并且我也没有深入研究代码,因此无法确定。
MatchScorer
这里是否有我想念的东西,或者这是正确的策略?我是否想念记录这种情况的地方?
为了清楚起见,这是预期结果的更详尽示例:
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.
自定义评分是我们的首要任务之一。我们希望有一个很好的方法来尽快进行此类操作。
在您的特定情况下,您当然可以通过执行两个单独的查询来获得所需的结果:第一个查询对“ title”进行字段限制,第二个查询对“ body”进行限制。