whoosh使用实例

一、开发环境:Python3.7.2

       IDE:Pycharm2018.3

       系统:Windows10

 

二、环境变量

       Python PyPI:whoosh(全文搜索)、jieba(中文分词)

       1)安装whoosh:

 pip install whoosh

      2)安装jieba:

pip install jieba

 

三、源程序及注释

"""
===========================================================
"""


def search_document():
    from whoosh.qparser import QueryParser
    from whoosh.index import create_in
    from whoosh.index import open_dir
    from whoosh.fields import TEXT, ID, Schema
    from jieba.analyse import ChineseAnalyzer

    analyser = ChineseAnalyzer()  # 导入中文分词工具
    """
    使用whoosh首先要建立schema对象,第一次创建索引时,必须定义索引的模式。该模式列出了索引中的字段。
    字段是索引中每个文档的一条信息,例如其标题或文本内容。
    下面使用到的schema索引对象。
    whoosh.fields.ID:这种类型只是将字段的整个值索引(并可选地存储)为一个单元(也就是说,它不会将其分解为单个单词)。
                     这对于文件路径,URL,日期,类别等字段很有用。
    whoosh.fields.STORED:此字段与文档一起存储,但未编入索引。此字段类型未编入索引且无法搜索。
                         这对于要在搜索结果中向用户显示的文档信息很有用。
    whoosh.fields.TEXT:此类型用于正文。它索引(并可选地存储)文本并存储术语位置以允许短语搜索。
    """
    schema = Schema(title=TEXT(stored=True, analyzer=analyser), path=ID(stored=True),
                    content=TEXT(analyzer=analyser))          # 创建索引结构

    ix = create_in("test", schema=schema, indexname='test')    # test为索引创建的地址,indexname为索引名称
    writer = ix.writer()
    """
    此处建立了一个索引,其根目录为test,test有两个子目录a、b
    a中包含c目录和名为name1的txt文件,c目录下包含名为name2的txt文件
    b中包含了name.txt文件
    其余为索引生成文件
    """
    # 读取文件内容
    name = open("test/b/name.txt", "r+", encoding="utf-8").read()
    name1 = open("test/a/name1.txt", "r+", encoding="utf-8").read()
    name2 = open("test/a/c/name2.txt", "r+", encoding="utf-8").read()

    # 将文件信息添加到索引中,共添加了5条信息
    writer.add_document(title=u"First document", path=u"/a",
                        content=u"This is the first document we've added!")
    writer.add_document(title=u"Second document", path=u"/b",
                        content=u"The second one is even more interesting!")  # 此处为添加的内容
    writer.add_document(title=u"Third document", path=u"/b",
                        content=name)
    writer.add_document(title=u"Fourth document", path=u"/a",
                        content=name1)
    writer.add_document(title=u"Fifth document", path=u"/a/c",
                        content=name2)

    print("建立完成一个索引")
    writer.commit()

    """--------------------以上为建立索引的过程----------------------"""

    new_list = []   # 存储检索结果
    index = open_dir("test", indexname='test')    # 读取建立好的索引
    # 查询语句结构
    with index.searcher() as searcher:
        parser = QueryParser("content", index.schema)    # 生成查询字段的对象
        find = input("请输入检索内容:")   # find表示要查询的内容
        myquery = parser.parse(find)      # 在content字段查询

        results = searcher.search(myquery, limit=None)  # limit为搜索结果的限制,默认为10
        print("检索结果:")
        for result1 in results:
            print(dict(result1))      # 打印查询结果
            new_list.append(dict(result1))
        if not new_list:
            print("没有此内容!")

关于Whoosh的使用可参考:https://pypi.org/project/Whoosh/,程序源码中使用的文件可由自己任意创建。

 

四、样例结果

检索关键字:天气

path:文档所在路径(这里的路径为相对路径)

title:文档标题whoosh使用实例_第1张图片

 

你可能感兴趣的:(python)