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例子相关推荐

  1. python 全文检索 whoosh flask_基于whoosh的flask全文搜索插件flask-msearch

    flask 的全文搜索插件很少,有个Flask-WhooshAlchemy,最近发现个flask-msearch,使用了下感觉不错. 安装flask-msearch pip install flask ...

  2. python全文检索框架_全文检索框架haystack和搜索引擎whoosh的使用

    认识全文检索和搜索引擎以及相应的安装配置 1.认识全文检索和搜索引擎 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理. haystack:全文检索的框架,支持w ...

  3. 纯Python方案实现中英文全文搜索

    点击上方"编程派",选择设为"设为星标" 优质文章,第一时间送达! 在互联网上的各类网站中,无论大小,基本上都会有一个搜索框,用来给用户对内容进行搜索,小到站点 ...

  4. 数学推导+纯Python实现机器学习算法:GBDT

    Datawhale推荐 作者:louwill,Machine Learning Lab 时隔大半年,机器学习算法推导系列终于有时间继续更新了.在之前的14讲中,笔者将监督模型中主要的单模型算法基本都过 ...

  5. 纯Python模块发布setup脚本编写示例

    纯Python模块发布setup脚本编写示例 2014 年 6 月 22 日IT.PythonIT.python 如果你正准备发布几个模块,特别当它们并不是只在一个特定的包内,你可以在setup脚本中 ...

  6. 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型

    Python机器学习算法实现 Author:louwill Machine Learning Lab HMM(Hidden Markov Model)也就是隐马尔可夫模型,是一种由隐藏的马尔可夫链随机 ...

  7. 【机器学习基础】数学推导+纯Python实现机器学习算法28:CRF条件随机场

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文我们来看一下条件随机场(Conditional Random Field,CRF)模型.作为概 ...

  8. 【机器学习基础】数学推导+纯Python实现机器学习算法27:EM算法

    Python机器学习算法实现 Author:louwill Machine Learning Lab 从本篇开始,整个机器学习系列还剩下最后三篇涉及导概率模型的文章,分别是EM算法.CRF条件随机场和 ...

  9. 【机器学习基础】数学推导+纯Python实现机器学习算法25:CatBoost

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文介绍GBDT系列的最后一个强大的工程实现模型--CatBoost.CatBoost与XGBoo ...

最新文章

  1. 微博云原生技术的思考与实践
  2. 调整Kali Linux的锁屏时间
  3. 学python买什么电脑-程序员,买了台破Apple电脑,用来学Python
  4. android开发 java与c# 兼容AES加密
  5. 第九十一期:架构设计常用到的10种设计模式,你都知道吗?
  6. 2020 年告别办公室!
  7. linux 下.bashrc和.profile的区别
  8. 一篇介绍OpenJDK字体的文章
  9. Atitit QL查询语言总结 目录 1. QL = Query Language, 是查询语言的简称 1 2. 模型 2 2.1. 内嵌语言执行 2 2.2. 语言互操作 2 3. 具体实现 2
  10. Monitor线程同步
  11. 手机工商银行显示服务器安装不了,工行网银助手无法安装怎么办?
  12. lenovo启动热键_联想笔记本进bios按什么键|联想笔记本开机进入bios热键是哪个
  13. HTC one/M7电信802d 毒蛇ViperOne2.1.0/高级毒蛇工具/完美root,精简/更多自定义,稳定,流畅ROM
  14. Python3安装turtle报错 File “/tmp/pip-install-hpqxw6_s/turtle/setup.py”, line 40
  15. 经典语录总结:识人篇
  16. Linux头文件 C/C++头文件
  17. 招聘方眼里的猎聘和Boss直聘直观对比
  18. html+视频添加字幕,给视频加滚动字幕,给视频加字幕制作mv 录制的视频配背景音乐...
  19. 大地坐标系、地理坐标系、投影坐标系
  20. 微信支付要租用服务器吗,切记!使用微信支付一定要打开这些功能!

热门文章

  1. 超全C1认证学习笔记,内容详细,赶快收藏
  2. c++strtol()
  3. 如何禁用或启用 Windows XP 系统还原
  4. 3分钟让你学会axios在vue项目中的基本用法(建议收藏)
  5. oracle登陆账号忘了,oracle初始账号密码Oracle忘记系统用户名和密码的解决方法
  6. DolphinScheduler之任务实例卡在停止任务解决办法
  7. 查看mysql数据库文件命令_MySQL 数据库常用命令
  8. 苹果云手机输入虚拟服务器,云虚拟服务器怎么手机控制
  9. 网络安全工程师需要具备的5个重要技能
  10. 实验四 模拟SPOOLING技术