需要用到的IPA:
IndexWriter:这个是索引创建的中心组件,通过他就可以创建索引,它是生成索引的过程(与读取和搜索索引没有关系)。初始化化它时,需要传递的两个参数。第一个是参数是指定索引创建的位置,第二是参数是配置分词器。
Document:这个文本相当于数据库中的一条记录,它里面需要添加Field,Document里面有多个Filed,根据你需求而定。
Field:我把它理解为索引创建的列,它里面封装了列里面的元素。如:通过姓名这个列,可以找到下面詹姆斯,杜兰特,科比。。具体的值。它也可以理解为一个Map集合。
总结为:
1.IndexWriter writer = new IndexWriter(INDEX_DIR, new StandardAnalyzer(), true);
2.Document doc = new Document();
3.doc.add(new Field(***));
4.writer.addDocument(doc);
5.writer.commit();//合并索引
6.writer.close();
下面是稍微加了点肉。
看下面代买。简写了一下。有错望指正。
//给索引指定创建位置以及配置信息
Directory directory=new SimpleFSDirectory(new File(Environment.getExternalStorageDirectory().getAbsoluteFile()+ "/Wy/file/"));
IndexWriterConfig config=new IndexWriterConfig(Version.LUCENE_36, new CJKAnalyzer(Version.LUCENE_36));
if(IsCreateIndex){
config.setOpenMode(OpenMode.CREATE);
}else{
config.setOpenMode(OpenMode.APPEND);
}
IndexWriter indexWriter=new IndexWriter(directory, config);
//这个是指定数据库
SQLiteDatabase database = SQLiteDatabase.openDatabase(IndexConfig.DataBasePath, null,SQLiteDatabase.OPEN_READWRITE);
//写sql语句,指定查询的lie
String sql="SELECT * FROM TProv WHERE id";
Cursor cursor = db.rawQuery(sql, null);
while(cursor.moveToNext()){
Document document=new Document();
//通过数据库查询获取得到所需内容
int id = cursor.getInt(cursor.getColumnIndex("id"));
mCursor.close();
//这个是关键
//这四个参数是第一个是存储的名字,自己定义,相当于key值;第二参数是存储对应的值;第三个参数是否进行保存存储,一般是yes;第四个参数是,是否分词,如果分词,查询出来就是分词的结果,如果部不分词查出来就是不分词的结果。
document.add(new Field("id",(id+"").trim(),Store.YES,Index.NOT_ANALYZED));
}
//这个就是建索引,统一添加到文本中
IndexWriter.addDocument(document);
}
cursor.close();
}
db.close();
IndexWriter.prepareCommit();
IndexWriter.commit();
IndexWriter.close();
Log.e("TAG", "索引创建完成");
System.gc();