Lucene基础篇1 概论

来源:互联网 发布:网络高清机顶盒哪个好 编辑:程序博客网 时间:2024/05/29 04:40

在学lucene 之初看了许多书,都是走马观花,没有项目的驱动下,来一个用例demo感觉也不是很难,“我会了”这是我的第一感觉。

         在2013年底公司接到一个项目用到lucene,这是我第一次正真接触Lucene,代码比较老3.6版本,不适合新项目的需求(空间查询)。于是下载了最新版本 4.51,有带“空间查询”模块。各大搜索引擎都没有找到像样例子,于是想到了lucene svn的trunk目录测试用例中找到了测试例子,开始了一段lucene之旅。

 

写数据,创建IndexWriter,通过它的构造函数需要一个索引目录(Diectory)和索引写入配置项(InderWriterConfig),直接上代码:

//设置写入目录(好几种呵呵)

Directoryd=FSDirectory.open(new File("D:/luceneTest"));

//设置分词 StandardAnalyzer(会把句子中的字单个分词)

Analyzeranalyzer= new StandardAnalyzer(Version.LUCENE_45);

//设置索引写入配置

IndexWriterConfigconfig=new IndexWriterConfig(Version.LUCENE_45,analyzer);

//设置创建模式

//config.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);

IndexWriter indexwriter=new IndexWriter(d,config);

 

    上面四行代码就创建好了indexwriter,下面把数据填入就好了,写入有多种方式如下图:


         用 addDocment 举例代码如下:

Document doc=new Document(); 

        doc.add(new StringField("id","1", Store.YES));

        doc.add(new StringField("name","brockhong", Store.YES));

        doc.add(new TextField("content","lucene文档第一次写看着给分吧", Store.YES)); 

//写入数据

indexwriter.addDocument(doc);

//提交

indexwriter.commit();

用 Luke 工具查看Text列,这是标准分词惹的祸哦!写入成功。

         读数据查询,创建 IndexSearcher构造函数设置indexReader ,输入查询条件,上面content字段数据设置了分词,所以必须通过查询解析类QueryParser设定分词字段、版本、分词模式,并通过parse方法得到查询条件。代码如下:       

 //读数据

 //创建 indexReader这个已过时 IndexReader.open(d),里面的代码一样可能为了兼容老版本

 IndexReader indexReader =DirectoryReader.open(d);

 IndexSearcher indexSearcher = new IndexSearcher(indexReader);

//查询设置分词字段

QueryParserqueryParser = new QueryParser(Version.LUCENE_45,"content",

                   new StandardAnalyzer(Version.LUCENE_45));

 //or 关系“给”、“分”

         queryParser.setDefaultOperator(QueryParser.OR_OPERATOR);

Query query =queryParser.parse("给分");

 

TopDocs results =indexSearcher.search(query, 100);

int numTotalHits =results.totalHits;

System.out.println(" " + numTotalHits +"完全匹配的文档");

ScoreDoc[] hits =results.scoreDocs;

for (int i = 0; i < hits.length; i++) {

              Document document = indexSearcher.doc(hits[i].doc);

              System.out.println("content:" + document.get("content"));

}



0 0
原创粉丝点击