Heim > Artikel > Backend-Entwicklung > Whoosh: Ein leichtes Suchtool für Python
Whoosh wurde als einfaches und schnelles Suchdiensttool für die Online-Dokumentation des Houdini 3D-Animationssoftwarepakets entwickelt und hat sich seitdem langsam zu einer ausgereiften Suchlösung entwickelt Open Source.
Whoosh ist ausschließlich in Python geschrieben. Es unterstützt jetzt sowohl Python2 als auch 3. Seine Vorteile sind wie folgt:
Index und Abfrage
Nach dem Verständnis des Autors und der offiziellen Dokumentation von Whoosh besteht die einführende Verwendung von Whoosh hauptsächlich aus Index und Abfrage. Eine der leistungsstarken Funktionen einer Suchmaschine besteht darin, dass sie eine Volltextsuche bereitstellen kann, die vom Sortieralgorithmus wie BM25 und auch davon abhängt, wie wir Felder speichern. Wenn Index als Substantiv verwendet wird, bezieht es sich daher auf den Index des Felds, und wenn Index als Verb verwendet wird, bezieht es sich auf die Festlegung des Index des Felds. Die Abfrage verwendet den Sortieralgorithmus, um basierend auf den abzufragenden Aussagen vernünftige Suchergebnisse zu liefern.
Bezüglich der Verwendung von Whoosh wurden in den offiziellen Dokumenten detaillierte Anweisungen gegeben. Der Autor gibt hier nur ein einfaches Beispiel, um zu veranschaulichen, wie Whoosh unser Sucherlebnis leicht verbessern kann.
Beispielcode
poem.csv
Felder
# -*- coding: utf-8 -*- import os from whoosh.index import create_in from whoosh.fields import * from jieba.analyse import ChineseAnalyzer import json # 创建schema, stored为True表示能够被检索 schema = Schema(title=TEXT(stored=True, analyzer=ChineseAnalyzer()), dynasty=ID(stored=True), poet=ID(stored=True), content=TEXT(stored=True, analyzer=ChineseAnalyzer()) )
Unter diesen kann die ID nur ein Einheitswert sein und nicht in mehrere Wörter unterteilt werden. Sie wird häufig für Dateipfade, URLs, Daten und Klassifizierungen verwendet. Erstellen Sie einen Index des Textes und speichern Sie ihn. Unterstützt die Wortsuche. Der Analysator wählt stotternde chinesische Wörter aus.
Indexdatei erstellen
Als nächstes müssen wir die Indexdatei erstellen. Wir verwenden das Programm, um zunächst die Datei „poem.csv“ zu analysieren, sie in einen Index umzuwandeln und sie in das Verzeichnis „indexdir“ zu schreiben. Der Python-Code lautet wie folgt:
# 解析poem.csv文件 with open('poem.csv', 'r', encoding='utf-8') as f: texts = [_.strip().split(',') for _ in f.readlines() if len(_.strip().split(',')) == 4] # 存储schema信息至indexdir目录 indexdir = 'indexdir/' if not os.path.exists(indexdir): os.mkdir(indexdir) ix = create_in(indexdir, schema) # 按照schema定义信息,增加需要建立索引的文档 writer = ix.writer() for i in range(1, len(texts)): title, dynasty, poet, content = texts[i] writer.add_document(title=title, dynasty=dynasty, poet=poet, content=content) writer.commit()
Abfrage
Nachdem der Index erfolgreich erstellt wurde, verwenden wir ihn zur Abfrage.
# 创建一个检索器 searcher = ix.searcher() # 检索content中出现'明月'的文档 results = searcher.find("content", "明月") print('一共发现%d份文档。' % len(results)) for i in range(min(10, len(results))): print(json.dumps(results[i].fields(), ensure_ascii=False))
Das Ausgabeergebnis lautet wie folgt:
一共发现44份文档。 前10份文档如下: {"content": "床前明月光,疑是地上霜。举头望明月,低头思故乡。", "dynasty": "唐代", "poet": "李白 ", "title": "静夜思"} {"content": "边草,边草,边草尽来兵老。山南山北雪晴,千里万里月明。明月,明月,胡笳一声愁绝。", "dynasty": "唐代", "poet": "戴叔伦 ", "title": "调笑令·边草"} {"content": "独坐幽篁里,弹琴复长啸。深林人不知,明月来相照。", "dynasty": "唐代", "poet": "王维 ", "title": "竹里馆"} {"content": "汉江明月照归人,万里秋风一叶身。休把客衣轻浣濯,此中犹有帝京尘。", "dynasty": "明代", "poet": "边贡 ", "title": "重赠吴国宾"} {"content": "秦时明月汉时关,万里长征人未还。但使龙城飞将在,不教胡马度阴山。", "dynasty": "唐代", "poet": "王昌龄 ", "title": "出塞二首·其一"} {"content": "京口瓜洲一水间,钟山只隔数重山。春风又绿江南岸,明月何时照我还?", "dynasty": "宋代", "poet": "王安石 ", "title": "泊船瓜洲"} {"content": "四顾山光接水光,凭栏十里芰荷香。清风明月无人管,并作南楼一味凉。", "dynasty": "宋代", "poet": "黄庭坚 ", "title": "鄂州南楼书事"} {"content": "青山隐隐水迢迢,秋尽江南草未凋。二十四桥明月夜,玉人何处教吹箫?", "dynasty": "唐代", "poet": "杜牧 ", "title": "寄扬州韩绰判官"} {"content": "露气寒光集,微阳下楚丘。猿啼洞庭树,人在木兰舟。广泽生明月,苍山夹乱流。云中君不见,竟夕自悲秋。", "dynasty": "唐代", "poet": "马戴 ", "title": "楚江怀古三首·其一"} {"content": "海上生明月,天涯共此时。情人怨遥夜,竟夕起相思。灭烛怜光满,披衣觉露滋。不堪盈手赠,
Das obige ist der detaillierte Inhalt vonWhoosh: Ein leichtes Suchtool für Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!