我有这段代码:
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'结果之后出现。
答案 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']