排序python嗖嗖声结果

时间:2016-01-20 08:35:39

标签: python whoosh

我有这段代码:

from whoosh import index, qparser

def find(text, indexDir, _doc_schema):
    parser = qparser.QueryParser("content", schema=_doc_schema, termclass=FuzzyTerm)
    query = parser.parse(text)
    index = index.open_dir(indexDir)
    with index.searcher() as searcher:
        for res in searcher.search(query, limit=limit, terms=True):
             result = {
                   "classname": res["classname"],
                   "code": res["code"],
             }
             if highlights:
                  result["text"] = res.highlights("content")
             print "Res ", result['text']
             print "Matched terms ", res.matched_terms()
             yield result

有没有办法在搜索时按相关级别对匹配的_terms进行排序?因此,如果我正在寻找'aaa',我希望条款'aaa'先来,但它们可能会在'aab'结果之后出现。

1 个答案:

答案 0 :(得分:0)

如果您将匹配的术语与结果一起生成,则可以为结果构建术语词典:

yield result, res.matched_terms()

然后建立字典:

>>> d = {}
>>> for result, terms in find(text, indexDir, _doc_schema):
...     for term in terms:
...         d.setdefault(term, []).append(result)

然后您可以按顺序遍历字典:

>>> for term in sorted(d.keys()):
...     print key, result['classname'], result['code']