ホームページ >バックエンド開発 >Python チュートリアル >Whoosh: Python 用の軽量検索ツール
Whoosh は Matt Chaput によって作成され、Houdini 3D アニメーション ソフトウェア パッケージのオンライン ドキュメントのシンプルかつ高速な検索サービス ツールとして始まりました。は徐々に成熟した検索ソリューション ツールとなり、オープンソースになりました。
Whoosh は純粋に Python で書かれています。柔軟で便利な軽量の検索エンジン ツールです。Python2 と 3 の両方をサポートするようになりました。その利点は次のとおりです:
Whoosh の公式紹介 Web サイトは、https://whoosh.readthedocs.io/en/latest/intro.html です。 ElasticSearch や Solr などの成熟した検索エンジン ツールと比較して、Whoosh は軽量で操作が簡単なので、小規模な検索プロジェクトでの使用を検討できます。
ES に精通している人にとって、検索の 2 つの重要な側面はマッピングとクエリ、つまりインデックス構築とクエリです。舞台裏には複雑なインデックス ストレージとクエリ解析があります。ソートアルゴリズムなど。 ES の経験がある場合、Whoosh は非常に簡単に始めることができます。
著者の理解と Whoosh の公式ドキュメントによれば、Whoosh の主な入門用途はインデックスとクエリです。検索エンジンの強力な機能の 1 つは、全文検索を提供できることです。これは、BM25 などの並べ替えアルゴリズムに依存し、フィールドの保存方法にも依存します。したがって、index が名詞として使用される場合はフィールドのインデックスを指し、index が動詞として使用される場合はフィールドのインデックスを確立することを指します。クエリは並べ替えアルゴリズムを使用して、クエリが必要なステートメントに基づいて適切な検索結果を提供します。
Whoosh の使用方法については、公式ドキュメントに詳細な説明が記載されていますが、ここでは、Whoosh がどのように簡単に検索エクスペリエンスを向上させることができるかを説明するために、著者は簡単な例のみを示しています。
#サンプル コードデータ このプロジェクトのサンプル データは詩.csv です。次の図はデータ セットの最初の 10 行です: poem.csvFields データセットの特性に基づいて、タイトル、王朝、詩人、内容の 4 つのフィールド (フィールド) を作成します。 。# -*- 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()) )このうちIDは単位値のみで複数の単語に分割することはできず、ファイルパス、URL、日付、カテゴリなどによく使われます。
#TEXT ファイルのテキスト コンテンツ、テキストのインデックス付けと保存、および単語検索のサポート。アナライザーは吃音中国語単語セグメンターを選択します。
インデックス ファイルの作成
# 解析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()
インデックスが正常に作成されると、indexdir ディレクトリが生成されます。このディレクトリには、上記の poem.csv データの各フィールドのインデックス ファイルが含まれます。
Query
たとえば、コンテンツに明るい月が含まれる詩をクエリする場合は、次のコードを入力できます:
# 创建一个检索器 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))
出力結果は次のとおりです:
一共发现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": "海上生明月,天涯共此时。情人怨遥夜,竟夕起相思。灭烛怜光满,披衣觉露滋。不堪盈手赠,
以上がWhoosh: Python 用の軽量検索ツールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。