lucene--索引工具类

创建索引的步骤:

0.创建分词器

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);

1.创建Directory,索引存放的位置

Directory directory = FSDirectory.open(new File("E:/Lucene/demo"));

2.创建IndexWrite,索引写入器

IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_36,analyzer);

IndexWrite write = new IndexWriter(directory,iwc);

3.创建Document对象

Document doc = new Document();

4.给Document添加Field

doc.add(new Field("name",names[i],Store.YES,Index.ANALYZED)); --添加字符串

doc.add(new NumericField("attach",Store.YES,true).setIntValue(23));  --添加整数

doc.add(new NumericField("attach",Store.YES,true).setDoubleValue(2.5d)); --添加双精度浮点

doc.add(new NumericField("attach",Store.YES,true).setFloatValue(3.6f)); --添加单精度浮点

doc.add(new NumericField("attach",Store.YES,true).setLongValue(44));  --添加长整型

doc.add(new NumericField("date",Store.YES,true).setLongValue(201254221)); --添加日期

doc.setBoost(2.5); --加权

5.添加文档到索引

writer.addDocument(doc);

6.提交或者关闭IndexWrite写入器(只有这样,索引才会正常创建)

writer.commit();

writer.close();

知识点

一、第0步骤的分词器(可以自定义分词器,重难点)

二、第1步骤创建索引文件目录(单例模式创建)

三、给Document添加域(不同数据类型的域值操作)

单例模式创建Directory、IndexReader、IndexSearcher代码:

private static IndexReader reader;

private static Directory directory;

static{

try {

directory = FSDirectory.open(new File("E:/Lucene/demo"));

reader = IndexReader.open(directory);

} catch (IOException e) {

e.printStackTrace();

}

}

/**

 * 获取索引目录

 * @return

 * @author:qiuchen

 */

public static Directory getDictionary(){

return directory;

}

/**

 * 获取读取器

 * @return

 * @author:qiuchen

 */

public static IndexReader getIndexReader(){

return reader;

}

/**

 * 获取查询器

 * @return

 * @author:qiuchen

 */

public static IndexSearcher getIndexSearcher(){

try {

if(reader != null){

reader = IndexReader.open(directory);

}else{

IndexReader ir = IndexReader.openIfChanged(reader);

if(ir != null){

reader.close();

reader = ir;

}

}

return new IndexSearcher(reader);

} catch (CorruptIndexException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

/**

 * 关闭查询器

 * @param searcher

 * @author:qiuchen

 */

public static void closeSearcher(IndexSearcher searcher){

try {

if(searcher != null){

searcher.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

/**

 * 关闭写入器

 * @param indexWriter

 * @author:qiuchen

 */

public void closeWrite(IndexWriter indexWriter){

try {

if(indexWriter != null){

indexWriter.close();

}

} catch (CorruptIndexException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

相关推荐