2016-01-20 6 views
-1

У меня есть этот фрагмент кода:Сортировка питон Свист результаты

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 

Есть ли способ сортировки мои matched_terms по уровню корреляции при поиске? Поэтому, если я ищу «aaa», я хочу, чтобы на первом месте были термины «aaa», но они могут появиться после результатов «aab».

+0

Вы хотите отсортировать результаты или только условия? –

+0

'print" Согласованные термины ", отсортировано (res.matched_terms())' –

+0

bigOTHER, да, я хочу сортировать результаты, снова мои проблемы. – Sht0p0r

ответ

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'] 
Смежные вопросы