问题

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。

全文索引搜索whoosh的更多相关文章

  1. SQLServer地址搜索性能优化例子

    这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...

  2. MySQL全文索引应用简明教程

    本文从以下几个方面介绍下MySQL全文索引的基础知识: MySQL全文索引的几个注意事项 全文索引的语法 几种搜索类型的简介 几种搜索类型的实例 全文索引的几个注意事项 搜索必须在类型为fulltex ...

  3. 1.搜索引擎的历史,搜索引擎起步,发展,繁荣,搜索引擎的原理,搜索技术用途,信息检索过程,倒排索引,什么是Lucene,Lucene快速入门

     一: 1  搜索引擎的历史 萌芽:Archie.Gopher Archie:搜索FTP服务器上的文件 Gopher:索引网页 2  起步:Robot(网络机器人)的出现与spider(网络爬虫) ...

  4. 在MYSQL中运用全文索引(FULLTEXT index)

    在MYSQL中使用全文索引(FULLTEXT index) MYSQL的一个很有用的特性是使用全文索引(FULLTEXT index)查找文本的能力.目前只有使用MyISAM类型表的时候有效(MyIS ...

  5. 全文索引Elasticsearch,Solr,Lucene

    最近项目组安排了一个任务,项目中用到了全文搜索,基于全文搜索 Solr,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量同步,而且是其他团队在维护,依赖性太强,导致 Solr 服务 ...

  6. MySQL 全文索引实现简单版搜索引擎

    目录 前言 使用 三种类型的全文搜索方式 相关参数 测试innodb引擎使用全文索引 准备 使用默认方式创建全文索引 使用ngram分词解析器创建全文索引 结论 前言 只有Innodb和myisam存 ...

  7. MySQL 之全文索引

    最近在复习数据库索引部分,看到了 fulltext,也即全文索引,虽然全文索引在平时的业务中用到的不多,但是感觉它有点儿意思,所以花了点时间研究一下,特此记录. 引入概念通过数值比较.范围过滤等就可以 ...

  8. MySQL索引结构之Hash索引、full-text全文索引(面)

    Hash索引 主要就是通过Hash算法(常见的Hash算法有直接定址法.平方取中法.折叠法.除数取余法.随机数法),将数据库字段数据转换成定长的Hash值,与这条数据的行指针一并存入Hash表的对应位 ...

  9. MySQL 全文索引实现一个简单版搜索引擎

    前言 只有Innodb和myisam存储引擎能用全文索引(innodb支持全文索引是从mysql5.6开始的) char.varchar.text类型字段能创建全文索引(fulltext index ...

随机推荐

  1. python的Web框架,Django模型系统二,模型属性,及数据库进阶查询

    原始数据接上篇文章来操作.可能需要查看后才能懂.点击这里查看 1.常用的模型字段类型 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fie ...

  2. RMQ问题(Sparse-Table算法)

    范围最值问题(Range Minimum/maximum Query,RMQ).给出一个哪个元素的数组A1,A2,...An,要求设计一个数据结构,支持查询操作:计算min(AL,AL+1,...,A ...

  3. Mybatis之基于XML的调用存储过程与手动回滚事务

    一.调用存储过程 一.返回单个值 1.存储过程准备 这里先创建一个存储过程,传入参数为age,传出参数为count.然后先测试一下是否正确. CREATE DEFINER=`root`@`localh ...

  4. angularjs学习第八天笔记(指令作用域研究)

    您好,在前两天对指令的简单了解和系统指令学习后 今天主要研究其指针作用域的相关事情 每一个指令在创建时,其实就构成了自己的一个小的模块单元. 其对于的模块单元都有着其对于的作用域,其中作用域一般有两种 ...

  5. ASP.NET WebAPI 集成 Swagger 启用 OAuth 2.0 配置问题

    在 ASP.NET WebAPI 集成 Swagger 后,由于接口使用了 IdentityServer 做的认证,调试起来很不方便:看了下 Swashbuckle 的文档 ,是支持 OAuth2.0 ...

  6. Nuget快捷实践

    Nuget快捷实践 简介 本文主要包含三个部分,即创建nuget包.上传nuget包和删除nuget包.旨在引导快速使用nuget打包和使用,并实现对于nuget的简单管理. 本文使用的nuget服务 ...

  7. CSS学习笔记07 盒子模型

    1.盒子模型 所谓盒子模型就是把HTML页面中的元素看作是一个矩形的盒子,也就是一个盛装内容的容器.每个矩形都由元素的内容.内边距(padding).边框(border)和外边距(margin)组成. ...

  8. 从函数式编程到Promise

    译者按: 近年来,函数式语言的特性都被其它语言学过去了.JavaScript异步编程中大显神通的Promise,其实源自于函数式编程的Monad! 原文: Functional Computation ...

  9. OAuth2.0的refresh token

    最近看人人网的OAuth认证,发现他是OAuth2.0,之前一直看的是新浪的OAuth,是OAuth1.0. 二者还是有很多不同的,主要的不同点在access token的获取方式. OAuth1.0 ...

  10. 关于python访问字典的方法

    def stu( **kwargs): # 在函数体内对于kwargs的使用不用带星号 print("大家好,我为大家简单自我介绍以下:") print(type(kwargs)) ...