whoosh为discuz帖子和文章标题创建索引

自媒体 投稿&转载 1208浏览

1、给Discuz帖子、文章标题创建索引

2、输入一个关键词,返回与这个关键词相关的帖子和文章

 

# coding=utf-8
import os,json,time
from whoosh.index import create_in
from whoosh.fields import *
from jieba.analyse import ChineseAnalyzer
from whoosh.qparser import QueryParser
from whoosh import qparser, scoring
from whoosh import index
import MySQLdb as mdb
 
reload(sys)
sys.setdefaultencoding('utf8')
 
start = time.time()
con = mdb.connect('127.0.0.1','root','','wddis',charset='utf8',unix_socket='/tmp/mysql.sock')


'''
表信息:
pre_forum_thread.subject&tid --> 存放帖子标题
pre_portal_article_title.title&aid--> 存放文章标题
'''


def new_index_sql():

	# 按照schema定义信息,增加需要建立索引的文档
	# 注意:字符串格式需要为unicode格式
 
	writer = ix.writer(limitmb=256,procs=4)
	cur = con.cursor()
 
	n = 0
	a = cur.execute("select count(*) from pre_forum_thread ")
	number = int(cur.fetchone()[0])
 
	with con:
		cur.execute("select tid,fid,subject from pre_forum_thread")
		numrows = int(cur.rowcount)
		for i in range(numrows):
			row = cur.fetchone()
 
			tid = row[0]
			fid = row[1]
			title = row[2]
 
			writer.add_document(title=title, tid=tid, fid=fid)
 
			n += 1
			percent=float(n)*100/float(number)
			sys.stdout.write("-----------> 完成百分比:%.2f" % percent)
			sys.stdout.write("%\r")
			sys.stdout.flush()
 
	writer.commit()
	sys.stdout.flush()
 
def search_index(words):
	with ix.searcher() as s:
		
		# group=qparser.OrGroup 表示可匹配任意查询词,而不是所有查询词都匹配才能出结果
		qp = QueryParser('title',schema=ix.schema,group=qparser.OrGroup)   
		
		# 下面两行表示可以使用通配符搜索,如”窗前*月光“
		qp.remove_plugin_class(qparser.WildcardPlugin)
		qp.add_plugin(qparser.PrefixPlugin())
		
		for word in words:
			q = qp.parse(u'%s' % word)
			results = s.search(q,limit=20)
			for i in results:
				#print word + "----->" + i["title"],i.highlights("title"),i.score
				print word,i['title'],i['tid'],i['fid']
 
 
# 使用结巴中文分词
analyzer = ChineseAnalyzer()
 
# 创建schema, stored为True表示能够被检索
schema = Schema(
				title=TEXT(stored=True, analyzer=analyzer),
				tid=NUMERIC(stored=True),
				fid=NUMERIC(stored=True),
				)
 
# 存储schema信息至'798wd_luntan'目录下
indexdir = '798wd_luntan/'
if not os.path.exists(indexdir):
	os.mkdir(indexdir)
try:
	ix=index.open_dir(indexdir)
	print '>>>>>>>> 已创建索引 <<<<<<<<<<'
except:
	print '>>>>>>>> 未创建索引 <<<<<<<<<<'
	ix = create_in(indexdir, schema)
	new_index_sql()
 
 
words = ["容易下款的高炮口子"]
search_index(words)
end = time.time()
print "完成时间: %f s" % (end - start)

推荐阅读

如何处理已经索引的“无效页面”?

(1)页面HTTP状态码404确认:使用页面HTTP状态查询页面返回的状态码是404。 (2)死链接文件制作:举例:编辑txt文档,编码为UFT-8,另存为.xml文件格式,UFT-8。 (3)上传死链文件至网站根目录下。 (4)使用百度站长工具-&......

百度索引多久更新一次?

百度索引数据最快每天更新一次,最迟一周更新一次,不同站点的更新日期可能不同。 相关SEO术语解释: 百度索引: 百度索引量是指有多少页面作为搜索候选结果。对于新站,由于收录比较慢,那么索引量一般远远大于收录,这是正常的现象,也是网站良好的表现,而且这......

网站的索引量突然下降是否正常?

索引量不等于流量,索引量会有定期数据波动,属于正常现象,索引量上下浮动10%,甚至更多都可能属于正常。 相关SEO术语解释: 索引: 索引是搜索引擎数据库,其中包含有关爬虫程序可以找到的所有网站的数据。如果索引中未包含网站,则该网站将不会显示在搜索引......