Lucene
lucene使用总结
1.创建索引库
1)确定索引路径 String path = "F:\\indexs";
2)关联索引路位置 FSDirectory directory = FSDirectory.(new File(path));
3)创建IK分词器类型 Analyzer analyzer = new IKAnalyzer();
4)创建索引核心类配置 IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_4_10_2, analyzer);
5)创建分词器 indexWriter = new IndexWriter(directory, indexWriterConfig);
6)创建索引文章对象 Document doc = new Document();
7)添加索引内 doc.add(new StringField("id", "p1010110", Store.)); doc.add(new TextField("title", "Lucene经典教程", Store.));8)添加索引库 indexWriter.addDocument(doc);
9)提交索引库 indexWriter.commit();
10)关闭资源 indexWriter.close();
2.搜索索引库
1)指定索引库位置 String path = "F:\\indexs";
2)读取索引库 DirectoryReader reader = DirectoryReader.(FSDirectory.(new File(path)));
3)查询核心类 IndexSearcher indexSearcher = new IndexSearcher(reader);
4)制定查询内容 String qName="经典";
5)创建IK解析分词器 QueryParser qParser = new QueryParser("films", new IKAnalyzer());//films是查询字段名
6)解析查询内容 Query query = qParser.parse(qName);
7)查询核心类查询 TopDocs topDocs= indexSearcher.search(query, 10);
8)文档概要信息遍历for(ScoreDoc sdoc : scoreDocs){
//获取文档Id
int docId = sdoc.doc;
}
详细讲解:
1.关联索引路径2种: FSDirectory 文件磁盘路径、RAMDirectory 内存路径,依赖文件磁盘路径FSDirectory
2.分词器4中:IKAnalyzer(推荐,中英文使用,可以添加扩展词典和停用词典)、StandardAnalyzer(简单分单词和单个汉字)、CJKAnalyzer(两两拆分,不管词义)、SmartChineseAnalyzer(适合中文、英文不好并且不支持扩展)
3.Document的IndexableField 三个实现类 : LongField、StringField(不分词)、TextField(分词)、
自定义(需要存储,不需要索引的字段)
FieldType testType = newFieldType();
testType.setTokenized(false);//不分词
testType.setIndexed(true);//索引
testType.setStored(true);//存储
Field test = newField("title", "如何学习solr",testType);
document.add(test);
4.IndexWriter操作索引目录时,对目录进行加锁 write.lock,当两个writer同时操作索引目录的时候,会报错,解决工具类实现单例
5.QueryParser查询解析器 2中:QueryParser(只支持单域分词)、MultiFieldQueryParser(查询多个域)
6.Query查询 6中:termQuery(不分词查询)、FuzzyQuery(相似查询,最多2次变换)、NumericRangeQuery(范围查询)、BooleanQuery(组合查询)
7.设置得分
8.设置高亮