您的位置:首页 > 其它

Lucene入门与使用(2)转

2008-04-17 21:42 405 查看
Lucene入门与使用(2)
2008-04-07 17:35
5. 利用Lucene进行检索

5.1 一段简单的检索代码

//需要捕捉IOException,ParseException异常

//处理检索条件

Query query = QueryParser.parse("入门", "text", analyzer);

//检索

Searcher searcher = new IndexSearcher("./index");//"index"指定索引文件位置

Hits hits = searcher.search(query);

//打印结果值集

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

doc = hits.doc(i);

String id = doc.get("id");

System.out.println("found " + "入门" + " on the id:" + id);

}

5.2 利用Lucene的检索接口

5.2.1 Query与QueryParser

主要使用方法:

QueryParser .parse(String query, String field, Analyzer analyzer),例如:

Query query = QueryParser.parse("入门", "text", analyzer);

"入门"为检索词, "text"为检索的字段名, analyzer为分析器

5.2.2 Hits与Searcher

Hits的主要使用接口:

接口名

备注

Doc(int n)

返回第n个的文档的所有字段

length()

返回这个集中的可用个数

6. Lucene的其他使用

6.1 Lucene 的索引修改

下面给出一段修改索引的代码,请根据Lucene的API解读:

/**

* 对已有的索引添加新的一条索引

* @param idStr String:要修改的id

* @param doc Document:要修改的值

*/

public void addIndex(String idStr, String valueStr) {

StandardAnalyzer analyzer = new StandardAnalyzer();

IndexWriter writer = null;

try {

writer = new IndexWriter(indexPath, analyzer, false);

writer.mergeFactor = 2; //修正lucene 1.4.2 bug,否则不能准确反映修改

Document doc = new Document();

doc.add(Field.UnIndexed("id", idStr));//“id”为字段名,“1”为字段值

doc.add(Field.Text("text", valueStr));

writer.addDocument(doc);

writer.optimize();

writer.close();

}

catch (IOException ioe) {

ioe.printStackTrace();

}

}

/**

* 删除索引

*

* @param idStr String

*/

public void deleteIndex(String idStr) {

try {

Directory dirt = FSDirectory.getDirectory(indexPath, false);

IndexReader reader = IndexReader.open(dirt);

IndexXML.deleteIndex(idStr, reader);

reader.close();

dirt.close();

}

catch (IOException ioe) {

ioe.printStackTrace();

}

}

6.2 Lucene 的检索结果排序

Lucene的排序主要是对org.apache.lucene.search.Sort的使用。Sort可以直接根据字段Field生成,也可以根据标 准的SortField生成,但是作为Sort的字段,必须符合以下的条件:唯一值以及Indexed。可以对Integers, Floats, Strings三种类型排序。

对整数型的ID检索结果排序只要进行以下的简单操作:

Sort sort = new Sort("id");

Hits hits = searcher.search(query, sort);

用户还可以根据自己定义更加复杂的排序,详细请参考API。

7 总结

Lucene给java的全文索引检索带来了非常强大的力量,以上仅对Lucene进行简单的入门说明。

参考资料:

1. Overview (Lucene 1.4-final API)

2. 车东 《在应用中加入全文检索功能--基于JAVA的全文索引引擎Lucene简介》

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: