`
youngerblue
  • 浏览: 43460 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

sphinx+python 索引耗内存

 
阅读更多

搜索一直用的是coreseek,数据源方面用的是python,以前数据量少的时候没问题,数据量一大,用python建索引就出现问题。

未做优化前,python建索引的过程的第一步就是先捞出所有的数据放内存,这也是官网文档的做法,数据量一大,必然导致占用内存过大,导致进程终止或者服务器负载过高。

实际数据:200W,在执行python数据源时,内存达到2g以上。

优化后的数据:内存维持在427M,没有继续增长。

原先的python的代码把sql的查询都放在def Connected(self)方法,一次性全部查询出来后使用def NextDocument(self)遍历。

现把查询语句调到NextDocument(self)方法中。
基本思路如下:
1. 先查询出该表的最大id值
2.对查询进行分页,比如10页,limit = maxId/10
3.第一次执行NextDocument或者执行次数是limit 的倍数的时候,执行sql查询,把查询结果出分页结果集
4.循环遍历结果集
5.分页次数到达11页时,return False。

此方法基本可以保证大数据量下建索引没有内存问题。

 

分享到:
评论
2 楼 yangguangmeng 2016-12-02  
您好: 还请指点下,谢谢! 我是读取目录下文件中数据,怎么修改呢。 下面代码不好使,请赐教下,谢谢!

# -*- coding:utf-8 -*-
# coreseek3.2 python source
# author: HonestQiao
# date: 2010-06-03 11:46



def IsSubString(SubStrList,Str): 
    flag=True 
    for substr in SubStrList: 
        if not(substr in Str): 
            flag=False 
 
    return flag


'''
data/1.txt
data/2.txt
'''
def GetFileList(FindPath,FlagStr=[]):
    import os 
    FileList=[] 
    FileNames=os.listdir(FindPath) 
    if (len(FileNames)>0): 
       for fn in FileNames: 
           if (len(FlagStr)>0): 
               if (IsSubString(FlagStr,fn)): 
                   fullfilename=os.path.join(FindPath,fn) 
                   FileList.append(fullfilename) 
           else: 
               fullfilename=os.path.join(FindPath,fn) 
               FileList.append(fullfilename) 
 
    if (len(FileList)>0): 
        FileList.sort() 
 
    return FileList


class MainSource(object):
    def __init__(self, conf):
        self.conf =  conf
        self.idx = 0
        self.data = []

    def SetFile(self, filename):
        self.file = filename
   
    def GetScheme(self): 
        return [
            ('id' , {'docid':True, } ),
            ('subject', { 'type':'text'} ),
            ('context', { 'type':'text'} ),
            ('published', {'type':'integer'} ),
            ('author_id', {'type':'integer'} ),
        ]

    def GetFieldOrder(self):
        return [('subject', 'context')]
  
    def NextDocument(self):  
            if self.idx < len(self.data):
                item = self.data[self.idx]
                self.docid = self.id = item['id']
                self.subject = item['subject']
                self.context = item['context']
                self.published = item['published']
                self.author_id = item['author_id']
                self.idx += 1
                return True
            else:
                return False



    def Connected(self):             
        pass
              


       

if __name__ == "__main__":   
    conf = {}
    source = MainSource(conf)
    source.Connected()
  
    FileList = []
    FileList = GetFileList("data/")
    for file in FileList:
        f = open(file, 'rb')     
        print file      
        lines = f.readlines()   
        #print len(lines)
       
        i =1
        TP=""
        BT=""
        ID=""
   
        while i<= len(lines)/154:
            TP = lines[66+154*(i-1)].strip('\n').decode('gbk').encode('utf-8')[1:]
            BT = lines[84+154*(i-1)].strip('\n').decode('gbk').encode('utf-8')[1:]
            ID = lines[92+154*(i-1)].strip('\n').decode('gbk').encode('utf-8')[2:]
            i = i+1
           
            if TP!="" and BT!="" and ID!="":
                source.data.append({'id':int(ID), 'subject':BT,'context':TP, 'published':int(100001), 'author_id':int(100001)})
                TP=""
                BT=""
                ID=""
           
        f.close()
          
    while 1:
        if source.NextDocument():
            #print "id=%d, subject=%s" % (source.docid, source.subject)
            continue
        else:
            break
    
#eof



1 楼 muzi1012 2012-09-15  
你好,我现在用python做数据源,建索引出来的文件才1k、0k大小,是不是有问题啊?
E:\GeoSearch\bin>indexer -c /GeoSearch/etc/scgeo.conf --all
Coreseek Fulltext 4.1 [ Sphinx 2.0.2-dev (r2922)]
Copyright (c) 2007-2011,
Beijing Choice Software Technologies Inc (http://www.coreseek.

using config file '/GeoSearch/etc/scgeo.conf'...
indexing index 'scgeo'...
WARNING: Attribute count is 0: switching to none docinfo
collected 99 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 99 docs, 891 bytes
total 6.113 sec, 145 bytes/sec, 16.19 docs/sec
total 1 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 6 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg

建索引操作提示这样的,能帮忙看下什么原因吗?网上找好久也没眉目,谢谢了

相关推荐

    Sphinx搜索引擎架构与使用文档(和MySQL结合)V1.1.

    ⑷、“主索引+增量索引”更新方式: 4 ⑸、“Ext3文件系统+tmpfs内存文件系统”相结合: 4 ⑹、中文分词词库: 5 二、MYSQL+SPHINX+SPHINXSE安装步骤: 5 1、安装python支持 5 2、编译安装LibMMSeg 5 3、编译安装...

    Sphinx使用手册

    Sphinx是一个基于SQL的全文检索引擎,可以结合...Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

    sphinx全文检索

    Sphinx是一个基于SQL的全文检索引擎,可以结合...Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

    sphinx-2.0.8-release.tar.gz源码包

    Sphinx是一个基于SQL的全文检索引擎,可以结合...Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

    sphinx-2.2.10-release.tar

    Sphinx是一个基于SQL的全文检索引擎,可以结合...Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

    Sphinx全文检索引擎 for Windows v2.0.6

    Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的主要特性包括:高速索引 (在新款CPU...

    Sphinx全文检索引擎 for Windows v2.0.6.zip

    Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的主要特性包括: 高速索引 (在新款...

    Sphinx全文检索引擎php版forWindowsv2.0.6

    Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更... Sphinx 单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒

    sphinx-2.0.8-1.rhel6.i386.rpm下载

    Sphinx是一个基于SQL的全文检索引擎,可以结合...Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

    Sphinx中文参考手册.rar

    一般而言,Sphinx是一个独立的搜索引擎,意图为其他应用提供高速、低空间占用、高结果相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。 当前系统内置MySQL和PostgreSQL 数据库数据源的支持...

    Sphinx全文检索引擎 for Linux v2.0.6

    Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的主要特性包括:高速索引 (在新款CPU...

    Sphinxphp全文检索引擎forLinuxv2.0.6

    Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更... Sphinx 单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒

    Sphinx v3.3.1全文检索引擎 for Windows_支持分布式搜索.zip

    Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的主要特性包括: 高速索引 (在新款CPU...

    Sphinx全文检索引擎for Linux v2.0.6.rar

    Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的主要特性包括: 高速索引 (在新款...

    sphinx-ext-jsindices:用一些JavaScript索引扩展Sphinx

    用一些JavaScript索引扩展Sphinx。 安装 该扩展名目前在PyPI上不可用。 请改用点子。 通过点子安装 pip install git+https://github.com/nemetris/sphinx-ext-jsindices.git 用法 在您的Sphinx配置文件conf.py激活...

    Python Sphinx使用实例及问题解决

    这篇文章主要介绍了Python Sphinx使用实例及问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 描述 使用 pip 安装sphinx后,按照教程建立了一个新的py...

    Sphinx全文检索引擎 for Windows v3.3.1

    为您提供Sphinx全文检索引擎 for Windows下载,Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供...Sphinx 单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒

    codesearch:Sphinx(搜索)索引器和搜索页面

    数据库后端后端由 Sphinx(用 2.1.9 测试)和 MySQL 组成。 提供了一个 SQL 文件scripts/create_db.sql来初始化 MySQL。 如果你通读它,你会看到它连接到 mysql @localhost,所以在部署 MySQL 的主机上运行它。索引...

    django-sphinxql:Django中的Sphinx搜索

    在Sphinx中索引Django模型。 使用类似Django的表达式执行Sphinx查询(SphinxQL),并将结果作为Django模型。 Django-SphinxQL需要: 的Python 3 pymysql Django(&gt; = 1.8) 狮身人面像 后端(pymysql或...

    Sphinx全文检索引擎 for Windows-PHP

    Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的主要特性包括: 高速索引 (在新款CPU...

Global site tag (gtag.js) - Google Analytics