Python公开课 - 全文检索模块Whoosh详解(3)

前言

在上一章中,我们使用Whoosh对文档进行索引进行了介绍,接下来,我们将阐述如何对已建立索引的文档进行检索。

1 创建Searcher对象

Searcher对象来源于Index类,我们可以非常方便的使用

with ix.searcher() as searcher:
    ...

我们可以通过lexicon(fieldname)方法,来获取对应field的词典列表

import whoosh.index as index
from whoosh.fields import *
schema = Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT)

ix = index.create_in("indexdir", schema)

writer = ix.writer()
writer.add_document(title=u"First document", path=u"/a", content=u"This is the first document we've added!")
writer.add_document(title=u"Second document", path=u"/b", content=u"The second one is even more interesting!")
writer.commit()

ix = index.open_dir("indexdir")
with ix.searcher() as searcher:
    print(list(searcher.lexicon("content")))

输出:

[b'added', b'document', b'even', b'first', b'interesting', b'more', b'one', b'second', b've']

当然searcher中最重要的方法自然是search()咯,通过它来对关键词进行检索并匹配的的结果。

from whoosh.qparser import QueryParser

qp = QueryParser("content", schema=schema)
q = qp.parse(u"hello world")

with ix.searcher() as s:
    # 每页20个,返回第5页
    results = s.search_page(q, 5, pagelen=20)

2 关于排序

Whoosh默认的是以BM25F算法进行排序,当然,你也可以指定排序算法,例如使用TF/IDF

from whoosh import scoring

with myindex.searcher(weighting=scoring.TF_IDF()) as s:
    ...

3 关键字高亮显示

可以使用highlights()方法,来使关键字高亮显示

from whoosh.qparser import QueryParser

qp = QueryParser("title", schema=schema)
q = qp.parse(u"second")

with ix.searcher() as s:
    # 每页20个,返回第1页
    results = s.search_page(q, 1, pagelen=20)
    for hit in results:
        print(hit.highlights("title"))

输出:

<b class="match term0">Second</b> document

4 相关关键字扩展

可以使用highlights()方法,来使关键字高亮显示more_like_this()方法扩展查询关键词

with ix.searcher() as s:
    # 每页20个,返回第1页
    results = s.search_page(q, 1, pagelen=20)
    for hit in results:
        more_results = hit.more_like_this("title")
        print(more_results)

5 查询多个字段

例如你想查询的关键字可能存在title中,也可能存在content中,那么这种情况,你需要使用MultifieldParser来处理

from whoosh.qparser import MultifieldParser

mparser = MultifieldParser(["title", "content"], schema=myschema)

相关阅读


相关主题:
相关推荐
  1. 鄱阳县东溪乡东康小学
  2. 吉林省长春市榆树市金手指全脑开发幼儿园 - 长春幼儿园黄页
  3. 西安雁塔雁南小学
  4. Python公开课 - Django自动添加Last-Modified和ETag
  5. 惠来一中
  6. 大连市金州新区金广隆幼儿园 - 大连幼儿园黄页
  7. 扬州市新华中学
  8. Django中如何对TemplateView进行缓存
  9. Python公开课 - 标准库Decimal详解
  10. 小脏兔
  11. 上海市长宁区剑河幼儿园附设托儿所 - 上海幼儿园黄页
  12. 我家宝贝·精英幼儿园 - 哈尔滨幼儿园黄页
  13. 秋天里的访问
  14. 汕头市新津中学
  15. 迁居的日子
  16. 电池技术 - 电动汽车的核心
  17. 鹅卵石的启示
  18. 武汉动物园火烈鸟孔雀排队打疫苗
  19. 熊小兵捉蚊子
  20. Java Web Services介绍
  21. 北京市东城区第二幼儿园分部 - 北京幼儿园黄页
  22. 事发武汉农夫山泉矿泉水内惊现大量虫卵
  23. 央媒聚焦!国庆假期173.78万人次打卡大美黄陂
  24. 隆化京房希望小学
  25. 西安市未央区沣东新城渊博幼儿园 - 西安幼儿园黄页
  26. 昆明市官渡区振华幼儿园 - 昆明市幼儿园黄页
  27. 车企数字化转型(上)
  28. 东莞市虎门镇红旗小学
  29. 上海市实验学校附属光明学校
  30. 上海市第五十二中学(初中部)
  31. 云主机性能测试脚本说明 - 脚本下载
  32. 萍乡市第六中学
  33. 百名网媒总编辑登上知音号欣赏武汉夜色
  34. 东莞市塘厦第一小学(塘厦一小)
  35. 厦门市民立小学
  36. 幼儿园入学准备物品清单
  37. 脱单!武汉的相亲角在哪你知道吗?
  38. 北京市门头沟区黑山小学
  39. 龙的起源
  40. 鸿雁金坤幼儿园 - 乌鲁木齐幼儿园黄页
  41. 无锡市宜兴外国语学校
  42. 黄骅市旧城镇小堤柳庄村小学
  43. 奥迪客户不满加价,被武汉4S店销售群殴
  44. 【读书】QBQ! 问题背后的问题 - 附下载地址
  45. 易中天给英雄武汉的一首诗 - 武汉新鲜事
  46. 警方通报:武汉男子持刀至五死一伤,嫌犯已跳桥
  47. 浏阳市第四中学
  48. 青岛延安二路小学
  49. 河北省唐山市滦南县新庄子幼儿园 - 唐山幼儿园黄页
  50. 武汉00后大二学妹拍视频月入七十万
  51. 良心和天鲤
  52. 提高网站加载速度 - Nginx配置开启Gzip
  53. 一个勇敢的小伙子
  54. 嘉祥县第二中学
  55. 什么是TOGAF - TOGAF系列教程(1)
  56. 长沙市耀华中学
  57. 桂林泓文实验学校
  58. 武汉推出越王勾践剑交通卡
  59. 圈里的鸡
  60. 海口市龙华区电力村幼儿园 - 海南省幼儿园黄页
  61. 狼和蚊子