PyLucene實戰
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
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!