全文索引搜索whoosh(2)

承接前面对whoosh的文章,继续:

写索引文件

下面开始写入索引内容,过程如下:

writer = ix.writer()
writer.add_document(title=u"my document", content=u"this is my document", path=u"/a", tags=u"firlst short", icon=u"/icons/star.png")
writer.add_document(title=u"my second document", content=u"this is my second document", path=u"/b", tags=u"second short", icon=u"/icons/sheep.png")
writer.commit()

特别注意:

  • 字段的值必须是unicode类型
  • 不是每个字段都必须赋值

更多的内容,请参考:如何索引文件官方文档

搜索

开始搜索,需要新建立一个对象,如:

searcher = ix.searcher()

一般来讲,不是这么简单地,建立对象相当于开始搜索,完事之后要关闭,所以在实战中,常常写成:

withe ix.searcher() as searcher:
(do somthing)

或者写成(与上面的等效):

try:
    searcher = ix.searcher()
    (do somthing)
finally:
    searcher.close()

接下来就开始搜索了,以搜索content为例:

from whoosh.qparser import QueryParser
with ix.searcher() as searcher:
    query = QueryParser("content",ix.schema).parse("second")
    result = searcher.search(query)
    results[0]

返回显示:

{"title":u"my second document","path":u"/a"}

前面已经将上述两个字段设置为stored=True.

whoosh与结巴分词

原计划写这个相关代码,但是google之后,发现阿小信的博客(恕我不能给出链接,因为只要有链接,本文就不能发布,在我的github中是完整的,这里是阉割版)中有非常完美的解决,我特地将那段代码抄下来,供需要者参考:

#-*- coding:utf-8 -*-
import jieba
from whoosh.analysis import Tokenizer,Token
from whoosh.compat import text_type

class ChineseTokenizer(Tokenizer):
    def __call__(self, value, positions=False, chars=False,
                 keeporiginal=False, removestops=True,
                 start_pos=0, start_char=0, mode='', **kwargs):
        assert isinstance(value, text_type), "%r is not unicode" % value
        t = Token(positions, chars, removestops=removestops, mode=mode,
            **kwargs)
        seglist=jieba.cut_for_search(value)                       #使用结巴分词库进行分词
        for w in seglist:
            t.original = t.text = w
            t.boost = 1.0
            if positions:
                t.pos=start_pos+value.find(w)
            if chars:
                t.startchar=start_char+value.find(w)
                t.endchar=start_char+value.find(w)+len(w)
            yield t                                               #通过生成器返回每个分词的结果token

def ChineseAnalyzer():
    return ChineseTokenizer()

声明

本文属于阉割之后的版本。要看完整版,请到我的github:qiwsir的algorithm。

全文索引搜索whoosh(2)

时间: 2024-10-05 07:27:45

全文索引搜索whoosh(2)的相关文章

全文索引搜索whoosh

问题 Whoosh是python中解决索引查找的模块,在讨论索引查找的文章已经对有关索引查找进行了阐述,此处详细说明Whoosh模块的应用. 思路说明 Whoosh的安装 这里有详细内容(链接被被阉割!) whoosh的使用步骤 whoosh在应用上划分三个步骤: 建立索引和模式对象 写入索引文件 搜索 下面依次阐述各步骤 建立索引和模式对象 建立索引模式 使用Whoosh的第一步就是要建立索引对象.首先要定义索引模式,以字段的形式列在索引中.例如: >>> from whoosh.fi

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

 一: 1  搜索引擎的历史 萌芽:Archie.Gopher Archie:搜索FTP服务器上的文件 Gopher:索引网页 2  起步:Robot(网络机器人)的出现与spider(网络爬虫) Robot基于网络的,可以执行特定任务的程序 Spider:特殊的机器人,网络爬虫,爬取互联网上的信息(可以是文件,网络)----网络自动下载程序 3   发展阶段:excite,galaxy,yahoo这些公司做搜索 4   繁荣:infoseek,AltaVista,Google和百度 5  

MySQL全文索引应用简明教程

本文从以下几个方面介绍下MySQL全文索引的基础知识: MySQL全文索引的几个注意事项 全文索引的语法 几种搜索类型的简介 几种搜索类型的实例 全文索引的几个注意事项 搜索必须在类型为fulltext的索引列上,match中指定的列必须在fulltext中指定过 仅能应用在表引擎为MyIsam类型的表中(MySQL 5.6以后也可以用在Innodb表引擎中了) 仅能再char.varchar.text类型的列上面创建全文索引 像普通索引一样,可以在定义表时指定,也可以在创建表后添加或者修改 对

mysql全文索引____ft_min_word_len

对于刚使用mysql全文索引搜索的童鞋,第一个疑惑可能就是,为什么我搜索xx结果不显示呢?明明我数据里面有.这个问题有很多种原因,其中最常见的就是ft_min_word_len(最小搜索长度)导致的. 准备测试数据如下 CREATE TABLE mysql_fulltext (id BIGINT UNSIGNED AUTO_INCREMENT, text_info VARCHAR(1000) NOT NULL, PRIMARY KEY(id), FULLTEXT(text_info) )ENGI

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

在MYSQL中使用全文索引(FULLTEXT index) MYSQL的一个很有用的特性是使用全文索引(FULLTEXT index)查找文本的能力.目前只有使用MyISAM类型表的时候有效(MyISAM是默认的表类型,如果你不知道使用的是什么类型的表,那很可能就是 MyISAM).全文索引可以建立在TEXT,CHAR或者VARCHAR类型的字段,或者字段组合上.我们将建立一个简单的表用来解释各种特性.简单用法(MATCH()函数)对3.23.23以后的版本有效,复杂的用法(IN BOOLEAN

MySQL 之全文索引

最近在复习数据库索引部分,看到了 fulltext,也即全文索引,虽然全文索引在平时的业务中用到的不多,但是感觉它有点儿意思,所以花了点时间研究一下,特此记录. 引入概念通过数值比较.范围过滤等就可以完成绝大多数我们需要的查询,但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较.全文索引就是为这种场景设计的. 你可能会说,用 like + % 就可以实现模糊匹配了,为什么还要全文索引?like + % 在文本比较少时是合适的,但是对于大量的文本数据

如何选择mysql存储引擎

一.MySQL的存储引擎 完整的引擎说明还是看官方文档:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 这里介绍一些主要的引擎 1.InnoDB存储引擎 InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务.除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎. 建议使用MySQL5.5及以后的版本,因为这个版本及以后的版本的InnoDB引擎性能更好. M

Hadoop与Lucene和Nutch的关系

Hadoop+Lucene+Nutch Hadoop中实现了 Google的GFS和MapReduce算法,使Hadoop成为了一个分布式的计算平台.Hadoop不仅是一个用于存储的分布式文件系统,而且是设计用来在由通用计算设备组成的大型集群上执行分布式应用的框架. Lucene是一个Java高性能全文索引引擎工具包可以方便的嵌入到各种实际应用中实现全文索引搜索功能.Nutch是一个应用程序,是一个以Lucene为基础实现的搜索引擎应用,Lucene为Nutch 提供了文本搜索和索引的API,N

Nutch之简介与安装

初学Nutch之简介与安装 初学Nutch之简介与安装 1.Nutch简介 Nutch是一个由Java实 现的,开放源代码(open-source)的web搜索引擎.主要用于收集网页数据,然后对其进行分析,建立索引,以提供相应的接口来对其网页数据进行 查询的一套工具.其底层使用了Hadoop来做分布式计算与存储,索引使用了Solr分布式索引框架来做,Solr是一个开源的全文索引框架,从 Nutch 1.3开始,其集成了这个索引架构. 1.1 Nutch的目标 Nutch 致力于让每个人能很容易,