zoukankan      html  css  js  c++  java
  • 全文索引搜索whoosh

    问题

    Whoosh是python中解决索引查找的模块,在讨论索引查找的文章已经对有关索引查找进行了阐述,此处具体说明Whoosh模块的应用。


    思路说明

    Whoosh的安装


    这里有具体内容(链接被被阉割!

    )


    whoosh的使用步骤


    whoosh在应用上划分三个步骤:

    1. 建立索引和模式对象
    2. 写入索引文件
    3. 搜索

    以下依次阐述各步骤

    建立索引和模式对象

    建立索引模式


    使用Whoosh的第一步就是要建立索引对象。首先要定义索引模式,以字段的形式列在索引中。

    比如:

    >>> from whoosh.fields import *
    >>> schema = Schema(title=TEXT, path=ID, content=TEXT)

    title/path/content就是所谓的字段。每一个字段相应索引查找目标文件的一部分信息,上面的样例中就是建立索引的模式:索引内容包含title/path/content。

    一个字段建立了索引,意味着它可以被搜索。也可以被存储,意味着返回结果。比如上面的样例。可以写成:

    >>> schema = Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT)

    这里在某些字段后面加入了(stored=True)。意味着将返回该字段的搜索结果。

    以上就建立好了索引模式。不须要反复建立索引模式,由于一旦此模式建立,将随索引保存。



    在生产过程中,假设你愿意。还可以建立一个类用于建立索引模式。

    例如以下样例:

    from whoosh.fields import SchemaClass, TEXT, KEYWORD, ID, STORED
    
    class MySchema(SchemaClass):
        path = ID(stored=True)
        title = TEXT(stored=True)
        content = TEXT
        tags = KEYWORD

    索引字段类型


    在上例中,title=TEXT,title是字段名称。后面的TEXT是该字段的类型。

    这两个分别说明了索引内容和查找对象类型。

    whoosh有例如以下字段类型,供建立所以模式使用。

    • whoosh.fields.ID:仅能为一个单元值,即不能切割为若干个词。通经常使用于诸如文件路径。URL,日期,分类。

    • whoosh.fields.STORED:该字段随文件保存,可是不能被索引。也不能被查询。经常使用于显示文件信息。

    • whoosh.fields.KEYWORD:用空格或者逗号(半角)切割的关键词,可被索引和搜索。

      为了节省空间,不支持词汇搜索。

    • whoosh.fields.TEXT:文件的文本内容。建立文本的索引并存储,支持词汇搜索。
    • whoosh.fields.NUMERIC:数字类型,保存整数或浮点数。
    • whoosh.fields.BOOLEAN:布尔类值
    • whoosh.fields.DATETIME:时间对象类型

    关于索引字段类型的很多其它内容,请看这里.(链接被被阉割!)


    建立索引存储文件夹


    索引模式建立之后。还要建立索引存储文件夹。例如以下:

    import os.path
    from whoosh.index import create_in
    from whoosh.index import open_dir
    
    if not os.path.exists('index'):     #假设文件夹index不存在则创建
        os.mkdir('index') 
    ix = create_in("index",schema)      #依照schema模式建立索引文件夹
    ix = open_dir("index")             #打开该文件夹一遍存储索引文件

    上例中。用create_in创建一个具有前述索引模式的索引存储文件夹对象,全部的索引将被保存在该文件夹(index)中。

    之后,用open_dir打开这个文件夹。



    第一步到此结束。

    把上面的代码整理一下,供參考:

    import os.path
    
    from whoosh import fields
    from whoosh import index
    
    schema = fields.Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT)
    
    if not os.path.exists("index"):
        os.mkdir("index")
    
    ix = index.create_in("index",schema)
    ix = index.open_dir("index")

    写索引文件


    (待续)


    声明


    本文属于阉割之后的版本号。

    要看完整版,请到我的github:qiwsir的ITArticles里面的BasicPython。

  • 相关阅读:
    [二叉树算法]关于层次遍历二叉树的一些算法总结
    数据库事务并发访问产生的问题及四种事务隔离级别
    当relative遇上z-index,阻断事件捕获
    关于CAS操作
    LRU算法与LRUCache
    Hadoop2.x 关于日志文件位置
    推荐系统架构图——我的软件工程概论课设
    文件上传+解析漏洞
    命令执行漏洞
    SSRF漏洞
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10743845.html
Copyright © 2011-2022 走看看