whoosh搜索引擎模板代码

whoosh搜索引擎模板代码

schema:自己定义的索引字段
index_name:创建的索引文件名字

`import os
from whoosh.fields import STORED,NUMERIC
from whoosh.index import create_in, open_dir
from whoosh.query import *
from whoosh.qparser import QueryParser
from whoosh.qparser import MultifieldParser
from conf.search_engine import INDEX_NAME,SCHEMA
import time

class SearchEngine(object):

def __init__(self):
    pass

def create_index(self,schema=SCHEMA,index_name=INDEX_NAME):
    '''
    创建索引
    :param schema:
    :param index_name:
    :return:
    '''
    # creating the index
    if not os.path.exists(index_name):
        os.mkdir(index_name)
    ix = create_in(index_name, schema)
    return True,ix

def get_index(self,index_name=INDEX_NAME):
    '''
    获取索引名称
    :param index_name:
    :return:
    '''
    ix = open_dir(index_name)
    return ix

def add_field(self,field_name,):
    pass

    # ix = self.get_index()
    # writer = ix.writer()
    # writer.add_field(field_name, fields.ID(stored=True))
    # writer.commit(optimize=True)

def del_field(self,field_name):
    '''
    删除字段
    :param field_name:
    :return:
    '''
    ix = self.get_index()
    writer = ix.writer()
    writer.remove_field(field_name)
    writer.commit(optimize=True)

def add_document(self,item):
    '''
    添加单条索引
    :param item:
    :return:
    '''
    ix = self.get_index(INDEX_NAME)
    writer = ix.writer()
    writer.add_document(
        id=item.id,
        show_id=item.show_id,
        update_time=item.gmt_modified,
        sell_count=item.sell_count,
        title=item.title
    )
    writer.commit(optimize=True)

def add_documents(self,items):
    '''
    添加索引集合
    :param items:
    :return:
    '''
    ix = self.get_index(INDEX_NAME)
    writer = ix.writer()
    for item in items:
        print(item.id,item.show_id)
        writer.add_document(
            id=item.id,
            show_id=str(item.show_id),
            update_time=item.gmt_modified,
            sell_count=item.sell_count,
            title=item.title
        )
    writer.commit(optimize=True)

def del_document(self,item_id):
    '''
    删除索引
    :param item_id:
    :return:
    '''
    ix = self.get_index()
    ix.delete_by_term('id',item_id)
    ix.commit()

def update_document(self,item):
    '''
    更新缩影文档
    :param item:
    :return:
    '''
    ix = self.get_index(INDEX_NAME)
    writer = ix.writer()
    writer.update_document(id=item.id,
            show_id=item.show_id,
            update_time=item.gmt_modified,
            sell_count=item.sell_count,
            title=item.title)
    writer.commit()

def search_by_keyword(self,keyword,page=1,pageSize=50):
    '''
    关键词搜索
    :param keyword:
    :return:
    '''
    print(time.time())
    ix = self.get_index()
    searcher = ix.searcher()
    qp = QueryParser("title", schema=ix.schema)
    q = qp.parse(keyword)
    with searcher as s:
        #results = s.search(q)
        results = s.search_page(q,page, pagelen=pageSize)
        taotal = results.scored_length()
        if taotal>0:
            return [{'id':r.get('id'),'title':r.get('title')} for r in results]
        return []

def search_by_keywords(self,keywords):
    ix = self.get_index()
    parser = QueryParser("title", schema=ix.schema)
    parser.parse(u"alpha OR beta gamma")

    #And([Or([Term('content', u'alpha'), Term('content', u'beta')]), Term('content', u'gamma')])

def search_more_fields(self,keywords,page=0,pageSize=50):
    '''
    多字段查询
    :param keywords:
    :param page:
    :param pageSize:
    :return:
    '''
    ix = self.get_index()
    searcher = ix.searcher()
    qp = MultifieldParser(["title", "content"], schema=ix.schema)
    q = qp.parse(keywords)
    with searcher as s:
        results = s.search_page(q, page, pagelen=pageSize)
        return results
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值