纯python全文检索whoosh例子
Whoosh 是一个纯 Python 实现的全文搜索框架,包括Analyzer、建索引、查询等功能。
官方文档地址 Whoosh 2.7.4 文档 — Whoosh 2.7.4 文档https://www.osgeo.cn/whoosh/index.html
先需要创建的就是 index 对象,index 对象是一个全局索引,需要先创建一个定义索引feild属性的 schema 对象。ix.writer() 获取IndexWriter
对象,IndexWriter
对象 add_document(**kwargs)
方法索引文档。 分词器和过滤器组合使用能实现复杂的分词效果。
from whoosh.qparser import QueryParser
from whoosh.index import create_in
from whoosh.index import open_dir
from whoosh.fields import *
from whoosh.analysis import RegexAnalyzer,StemmingAnalyzer
from whoosh.analysis import StemFilter,DelimitedAttributeFilter,IntraWordFilter
from whoosh.analysis import RegexTokenizer
from jieba.analyse import ChineseAnalyzer
#from get_comment import SQL
from whoosh.sorting import FieldFacet def showAnalyResult( doc, tokenizer ):print( [token.text for token in tokenizer(doc)] )def indexDoc():#导入中文分词工具analyser = ChineseAnalyzer()#analyser = RegexAnalyzer() | StemmingAnalyzer() | ChineseAnalyzer() #错误analyser = ChineseAnalyzer() | IntraWordFilter() | StemFilter()tkn = RegexTokenizer() | IntraWordFilter() | StemFilter()# 创建索引结构schema = Schema(phone_name=TEXT(stored=True, analyzer=analyser), price=NUMERIC(stored=True), phoneid=ID(stored=True))#indexpath 为索引创建的地址,indexname为索引名称ix = create_in("indexpath", schema=schema, indexname='indexname') writer = ix.writer()#显示分词结果showAnalyResult( 'iphone6' , tkn )writer.add_document(phone_name='iphone6',price ="6800",phoneid ="1") # IntraWordFilter会拆分数字writer.add_document(phone_name='redmik40',price ="3000",phoneid ="2") # 搜索词是redmik,redmi无结果writer.add_document(phone_name='红米k40',price ="3000",phoneid ="6")writer.add_document(phone_name='xiaomi10',price ="4000",phoneid ="3")writer.add_document(phone_name='xiaomi11',price ="4500",phoneid ="4")writer.add_document(phone_name='redmi-k30',price ="1800",phoneid ="5")writer.add_document(phone_name='红米k30',price ="1800",phoneid ="7") print("建立完成一个索引") writer.commit() indexDoc()
检索时,先读取索引文件,建立QueryParser对象,解析检索关键词和检索语法,通过Search对象检索数据。QueryParser对象通过插件机制支持多关键词、多字段及and or逻辑查询。
def query():new_list = [] index = open_dir("indexpath", indexname='indexname') #读取建立好的索引with index.searcher() as searcher: parser = QueryParser("phone_name", index.schema) #要搜索的项目,比如“phone_namemyquery = parser.parse("redmi") #搜索的关键字facet = FieldFacet("price", reverse=True) #按序排列搜索结果 results = searcher.search(myquery, limit=None, sortedby=facet) #limit为搜索结果的限制,默认为10for result1 in results: print(dict(result1)) new_list.append(dict(result1)) query()
Whoosh 有一些很有用的预定义 field types,你也可以很easy的创建你自己的。
whoosh.fields.ID
这个类型简单地将field的值索引为一个独立单元(这意味着,他不被分成单独的单词)。这对于文件路径、URL、时间、类别等field很有益处。
whoosh.fields.STORED
这个类型和文档存储在一起,但没有被索引。这个field type不可搜索。这对于你想在搜索结果中展示给用户的文档信息很有用。
whoosh.fields.KEYWORD
这个类型针对于空格或逗号间隔的关键词设计。可索引可搜索(部分存储)。为减少空间,不支持短语搜索。
whoosh.fields.TEXT
这个类型针对文档主体。存储文本及term的位置以允许短语搜索。
whoosh.fields.NUMERIC
这个类型专为数字设计,你可以存储整数或浮点数。
whoosh.fields.BOOLEAN
这个类型存储bool型
whoosh.fields.DATETIME
这个类型为 datetime object而设计(更多详细信息)
whoosh.fields.NGRAM 和 whoosh.fields.NGRAMWORDS
这些类型将fiel文本和单独的term分成N-grams(更多Indexing & Searching N-grams的信息
多字段查询语法
qp = qparser.QueryParser(None, myschema)
>>> qp.add_plugin(qparser.MultifieldPlugin(["a", "b"])
>>> qp.parse("alfa c:bravo")
And([Or([Term("a", "alfa"), Term("b", "alfa")]), Term("c", "bravo")])
纯python全文检索whoosh例子相关推荐
- python 全文检索 whoosh flask_基于whoosh的flask全文搜索插件flask-msearch
flask 的全文搜索插件很少,有个Flask-WhooshAlchemy,最近发现个flask-msearch,使用了下感觉不错. 安装flask-msearch pip install flask ...
- python全文检索框架_全文检索框架haystack和搜索引擎whoosh的使用
认识全文检索和搜索引擎以及相应的安装配置 1.认识全文检索和搜索引擎 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理. haystack:全文检索的框架,支持w ...
- 纯Python方案实现中英文全文搜索
点击上方"编程派",选择设为"设为星标" 优质文章,第一时间送达! 在互联网上的各类网站中,无论大小,基本上都会有一个搜索框,用来给用户对内容进行搜索,小到站点 ...
- 数学推导+纯Python实现机器学习算法:GBDT
Datawhale推荐 作者:louwill,Machine Learning Lab 时隔大半年,机器学习算法推导系列终于有时间继续更新了.在之前的14讲中,笔者将监督模型中主要的单模型算法基本都过 ...
- 纯Python模块发布setup脚本编写示例
纯Python模块发布setup脚本编写示例 2014 年 6 月 22 日IT.PythonIT.python 如果你正准备发布几个模块,特别当它们并不是只在一个特定的包内,你可以在setup脚本中 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型
Python机器学习算法实现 Author:louwill Machine Learning Lab HMM(Hidden Markov Model)也就是隐马尔可夫模型,是一种由隐藏的马尔可夫链随机 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法28:CRF条件随机场
Python机器学习算法实现 Author:louwill Machine Learning Lab 本文我们来看一下条件随机场(Conditional Random Field,CRF)模型.作为概 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法27:EM算法
Python机器学习算法实现 Author:louwill Machine Learning Lab 从本篇开始,整个机器学习系列还剩下最后三篇涉及导概率模型的文章,分别是EM算法.CRF条件随机场和 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法25:CatBoost
Python机器学习算法实现 Author:louwill Machine Learning Lab 本文介绍GBDT系列的最后一个强大的工程实现模型--CatBoost.CatBoost与XGBoo ...
最新文章
- 微博云原生技术的思考与实践
- 调整Kali Linux的锁屏时间
- 学python买什么电脑-程序员,买了台破Apple电脑,用来学Python
- android开发 java与c# 兼容AES加密
- 第九十一期:架构设计常用到的10种设计模式,你都知道吗?
- 2020 年告别办公室!
- linux 下.bashrc和.profile的区别
- 一篇介绍OpenJDK字体的文章
- Atitit QL查询语言总结 目录 1. QL = Query Language, 是查询语言的简称	1 2. 模型	2 2.1. 内嵌语言执行	2 2.2. 语言互操作	2 3. 具体实现	2
- Monitor线程同步
- 手机工商银行显示服务器安装不了,工行网银助手无法安装怎么办?
- lenovo启动热键_联想笔记本进bios按什么键|联想笔记本开机进入bios热键是哪个
- HTC one/M7电信802d 毒蛇ViperOne2.1.0/高级毒蛇工具/完美root,精简/更多自定义,稳定,流畅ROM
- Python3安装turtle报错 File “/tmp/pip-install-hpqxw6_s/turtle/setup.py”, line 40
- 经典语录总结:识人篇
- Linux头文件 C/C++头文件
- 招聘方眼里的猎聘和Boss直聘直观对比
- html+视频添加字幕,给视频加滚动字幕,给视频加字幕制作mv 录制的视频配背景音乐...
- 大地坐标系、地理坐标系、投影坐标系
- 微信支付要租用服务器吗,切记!使用微信支付一定要打开这些功能!