您的位置:首页 > 编程语言 > Python开发

Lucene 简单入门

2018-02-05 17:00 288 查看
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

from java.nio.file import Paths
import sys,os,lucene

from org.apache.lucene.store import SimpleFSDirectory
from org.apache.lucene.index import DirectoryReader
from org.apache.lucene.search import IndexSearcher
from org.apache.lucene.analysis.core import WhitespaceAnalyzer  #分词器
from org.apache.lucene.queryparser.classic import QueryParser   #查询表达式

lucene.initVM()  #初始化
chat_directory_path = Paths.get(os.path.join(curdir,"xxx"))  #返回一个路径,在该路径下建立索引文件
chat_directory = SimpleFSDirectory(chat_directory_path)
chat_search = IndexSearcher(DirectoryReader.open(chat_directory))
analyzer = WhitespaceAnalyzer()

#使用查询
qc = "post:(+我 是 +谁)"  #在索引文件搜索包含 “我” “谁”的句子
query = QueryParser("contents",analyzer).parse(qc)
o = chat_search.search(query,5).scoreDocs
for z in o:
doc = chat_search.doc(z.doc)
print "id:%s" %doc.get("id")
print "score:%s" %doc.get("score")
print "post:%s" %doc.get("post") #检索匹配的内容

关于 Lucene 内置的分词器介绍:

     1.WhitespaceAnalyzer  仅仅去除空格,不支持中文

     2.SimpleAnalyzer         首先通过非字母字符分割文本信息,然后单词统一为小写,去除数字字符

     3.StopAnalyzer            在SimpleAnalyzer的基础上增加了去除英文常用词,如the a 。。。

     4.StandardAnalyzer    支持中文采用的方法为单词切分,去掉停止词和标点符号

关于搜索:

      不写的话默认是或关系, +代表必须出现 -代表必须不能出现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lucene python