CoreSeek和Sphinx中文全文检索备忘

1、分词词典文件地址:F:\coreseek-4.1-win32\etc\unigram.txt

2、python需要安装2.6及以下版本,上下不兼容,作用oracle万能数据源接口;安装完成后,将python.exe纳入path;安装cx_Oracle,在python命令行下面import cx_Oracle不报错证明安装完成

3、所有python的配置文件都大体相同,需要定义的如下图,定义python源文件路径,源文件的入口地址,索引数据存放地址以及数据存放格式等

image

4、python源文件代码:主要是数据连接部分和中文索引时相应编码的问题;在32位win7下测试通过,但不保证所有系统下测试能通过;

# -*- coding:utf-8 -*-
# python source演示操作oracle数据库

from os import path
import os
import sys
import cx_Oracle
import datetime

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

def GetScheme(self):  #获取结构,docid、文本、整数
return [
(‘id’ , {‘docid’:True, } ),
(‘name’, { ‘type’:’text’} ),
(‘yqsize’, { ‘type’:’text’} ),
(‘add_date’, {‘type’:’integer’} ),
]

def GetFieldOrder(self): #字段的优先顺序
return [(‘name’, ‘yqsize’)]

def Connected(self):   #如果是数据库,则在此处做数据库连接
if self.conn==None:
self.conn = cx_Oracle.connect(‘sppt/a123456@10.10.28.104/sgsttest’)
self.cur = self.conn.cursor()
sql = ‘SELECT id,name,yqsize,add_date FROM yqxx’
self.cur.execute(sql)
self.data = [ row for row in self.cur]
pass

def NextDocument(self, err):   #取得每一个文档记录的调用
if self.idx < len(self.data):
item = self.data[self.idx]
self.id = self.threadid = item[0] #’docid’:True
            self.name = item[1].decode(“GBK”).encode(“UTF-8”)
self.yqsize = item[2].decode(“GBK”).encode(“UTF-8”)
            self.add_date = item[3]
self.idx += 1
return True
else:
return False

if __name__ == “__main__”:    #直接访问演示部分
conf = {}
source = MainSource(conf)
source.Connected()

while source.NextDocument({}):
print “id=%d, subject=%s” % (source.id, source.name.decode(“UTF-8”))
pass
#eof

5、运行test_python_oracle.cmd,可以查看索引的过程,最后启动searchd,监听9132端口,在服务器稳定的时候,可将其作为服务,开机自动启动

6、关于python中文编码问题:主要分为:控制台编码、文件编码、文件中文编码;解码方式主要有encode decode;如,从数据库读取到utf8文件编码转换时,显示数据中的编码是中文编码,于是先解编码GBK,然后再encode utf8;如上图红字;

7、不同的控制台,运行同一个python文件,可能会得到不同的结果,跟控制台编码有关。如:用PowerCmd运行与用cmd运行得到不同结果

还未解决的问题:

  • 得到的结果是以数组的方式返回的,但没有详细解释翻页怎么来实现,所以要想知道,还需要看其api
  • 还未查看怎么样进行增量索引的问题,能否在不停止任务的时候定时增量索引

发表评论

您的电子邮箱地址不会被公开。