全文索引搜索whoosh
问题
Whoosh是python中解决索引查找的模块,在讨论索引查找的文章已经对有关索引查找进行了阐述,此处具体说明Whoosh模块的应用。
思路说明
Whoosh的安装
这里有具体内容(链接被被阉割!
)
whoosh的使用步骤
whoosh在应用上划分三个步骤:
- 建立索引和模式对象
- 写入索引文件
- 搜索
以下依次阐述各步骤
建立索引和模式对象
建立索引模式
使用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的更多相关文章
- SQLServer地址搜索性能优化例子
这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...
- MySQL全文索引应用简明教程
本文从以下几个方面介绍下MySQL全文索引的基础知识: MySQL全文索引的几个注意事项 全文索引的语法 几种搜索类型的简介 几种搜索类型的实例 全文索引的几个注意事项 搜索必须在类型为fulltex ...
- 1.搜索引擎的历史,搜索引擎起步,发展,繁荣,搜索引擎的原理,搜索技术用途,信息检索过程,倒排索引,什么是Lucene,Lucene快速入门
一: 1 搜索引擎的历史 萌芽:Archie.Gopher Archie:搜索FTP服务器上的文件 Gopher:索引网页 2 起步:Robot(网络机器人)的出现与spider(网络爬虫) ...
- 在MYSQL中运用全文索引(FULLTEXT index)
在MYSQL中使用全文索引(FULLTEXT index) MYSQL的一个很有用的特性是使用全文索引(FULLTEXT index)查找文本的能力.目前只有使用MyISAM类型表的时候有效(MyIS ...
- 全文索引Elasticsearch,Solr,Lucene
最近项目组安排了一个任务,项目中用到了全文搜索,基于全文搜索 Solr,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量同步,而且是其他团队在维护,依赖性太强,导致 Solr 服务 ...
- MySQL 全文索引实现简单版搜索引擎
目录 前言 使用 三种类型的全文搜索方式 相关参数 测试innodb引擎使用全文索引 准备 使用默认方式创建全文索引 使用ngram分词解析器创建全文索引 结论 前言 只有Innodb和myisam存 ...
- MySQL 之全文索引
最近在复习数据库索引部分,看到了 fulltext,也即全文索引,虽然全文索引在平时的业务中用到的不多,但是感觉它有点儿意思,所以花了点时间研究一下,特此记录. 引入概念通过数值比较.范围过滤等就可以 ...
- MySQL索引结构之Hash索引、full-text全文索引(面)
Hash索引 主要就是通过Hash算法(常见的Hash算法有直接定址法.平方取中法.折叠法.除数取余法.随机数法),将数据库字段数据转换成定长的Hash值,与这条数据的行指针一并存入Hash表的对应位 ...
- MySQL 全文索引实现一个简单版搜索引擎
前言 只有Innodb和myisam存储引擎能用全文索引(innodb支持全文索引是从mysql5.6开始的) char.varchar.text类型字段能创建全文索引(fulltext index ...
随机推荐
- Python NumPy学习总结
一.NumPy简介 其官网是:http://www.numpy.org/ NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Num ...
- MySQL基准测试(一)--原因,策略,思路
MySQL基准测试(一)--原因,策略,思路 运用benchmark的原因 验证一些你认为的问题,通过基准测试和模拟数据来验证. 解决生产系统的一些异常 测试系统的当前的运行情况,通过历史的基准测试结 ...
- 服务器CPU居高不下--解决问题历程
基本的概述 在一个服务器的集群上面,服务器的CPU长时间居高不下,响应的时间也一直很慢,即使扩容了服务器CPU的下降效果也不是很明显. 对于CPU过高的原因,可以总结到以下原因: 太多的循环或者死循环 ...
- 140 - The 12th Zhejiang Provincial Collegiate Programming Contest(浙江省赛2015)
Ace of Aces Time Limit: 2 Seconds Memory Limit: 65536 KB There is a mysterious organization c ...
- Why is one loop so much slower than two loops?
Question: Suppose a1, b1, c1, and d1 point to heap memory and my numerical code has the following co ...
- Nhibernate学习的第二天
Fluent-Nhibernate 网站:http://www.fluentnhibernate.org/ 使用NuGet下载Fluent-Nhibernate. 1.创建实体类 2.创建实体类映 ...
- Python十讲 - 第二讲:变量和基础数据类型
本讲主要内容 变量 字符串 数字和运算符 数据类型转换 2.1 变量 1. 变量是什么? 变量,是指把程序运行的中间结果临时的存在内存里,以便后续的代码调用,其值可以修改. 在python中,当变量被 ...
- 使用Via浏览器+ADM下载器突破百度网盘下载限速
1.下载必要工具 via浏览器 ADM下载器 2.自定义 UA UA 是一串特殊字符,用来告诉所访问的网站,手机使用的操作系统及版本.CPU 类型.浏览器及版本等信息.UA 内容如下: Mozilla ...
- Python全栈学习_day001作业
Day1作业及默写 1.简述变量命名规范 1. 必须以字母.数字.下划线命名,且不能以数字开头 2. 不能是python的关键字 3. 不能以中文或者拼音作为变量名 4. 命名格式推荐以驼峰式或者下划 ...
- 七牛云java(服务端)通用工具类
前言 需要安装lombok插件. 功能列表 上传本地文件 上传Base64图片 获取文件访问地址 上传MultipartFile 代码 pom.xml <dependency> <g ...