PyLucene实战
jopen
12年前
PyLucene是Java版Lucene的Python版封装。这个工具的目标是让Python使用Lucene的文本索引和搜索能力。它与Java版Lucene的最新版本是兼容的。PyLucene把一个带有JAVA VM的Lucene嵌入到Python进程中。你可以在http://lucene.apache.org/pylucene/网站上找到更多的PyLucene详情。
本文中,我们将描述如何使用PyLucene构建搜索索引和查询一个搜索索引。你可以从先前的文档看到Lucene3.0安装说明。
PyLucene-Win32下的安装包可以从下面的网址中找到:
http://code.google.com/a/apache-extras.org/p/pylucene-extra/downloads/list
注:使用PyLucene必须安装Java SDK。
1. 使用PyLucene创建索引
使用下面的代码基于PyLucene来创建索引
#!/usr/bin/env python import os,sys,glob import lucene fromlucene import SimpleFSDirectory, System, File, Document, Field, \ StandardAnalyzer, IndexWriter, Version """ Example of Indexing with PyLucene 3.0 """ def luceneIndexer(docdir,indir): """ IndexDocuments from a directory """ lucene.initVM() DIRTOINDEX= docdir INDEXIDR= indir indexdir= SimpleFSDirectory(File(INDEXIDR)) analyzer= StandardAnalyzer(Version.LUCENE_30) index_writer= IndexWriter(indexdir,analyzer,True,\ IndexWriter.MaxFieldLength(512)) fortfile in glob.glob(os.path.join(DIRTOINDEX,'*.txt')): print"Indexing: ", tfile document= Document() content= open(tfile,'r').read() document.add(Field("text",content,Field.Store.YES,\ Field.Index.ANALYZED)) index_writer.addDocument(document) print"Done: ", tfile index_writer.optimize() printindex_writer.numDocs() index_writer.close()
你必须提供两个参数给luceneIndexer()函数。
1) 一个保存被索引文档的目录路径;
2) 一个索引存储的目录路径。
2. 使用Pylucene查询
下面的代码用于查询Pylucene创建的索引。
#!/usr/bin/env python import sys import lucene fromlucene import SimpleFSDirectory, System, File, Document, Field,\ StandardAnalyzer, IndexSearcher, Version,QueryParser """ PyLucene retriver simple example """ INDEXDIR = "./MyIndex" def luceneRetriver(query): lucene.initVM() indir= SimpleFSDirectory(File(INDEXDIR)) lucene_analyzer= StandardAnalyzer(Version.LUCENE_30) lucene_searcher= IndexSearcher(indir) my_query= QueryParser(Version.LUCENE_30,"text",\ lucene_analyzer).parse(query) MAX= 1000 total_hits =lucene_searcher.search(my_query,MAX) print"Hits: ",total_hits.totalHits forhit in total_hits.scoreDocs: print"Hit Score: ",hit.score, "Hit Doc:",hit.doc, "HitString:",hit.toString() doc= lucene_searcher.doc(hit.doc) printdoc.get("text").encode("utf-8") luceneRetriver("really coolrestaurant")
在代码中,我们认为的指定索引目录为INDEXDIR=./MyIndex,你也可以使用命令行参数(sys.argv)来接收索引目录来替换它。
当使用函数luceneRetriver()时,你必须给一个查询作为参数。
转自:http://blog.csdn.net/fan_hai_ping/article/details/7966461