Lucene 学习笔记(一)

    最近,由于需要做到搜索功能,但是搜索功能里面,涉及的关系比较复杂,如果通过sql语言来查询,效率十分低下,所以便开始研究了下java开源搜索引擎lucene 。

    Lucene入门起来了解其使用规则并不难,他是围绕索引Index来进行创建,查询等操作。而索引是存放在Directory中,Directory有很多种类,不过主要分成两种:

    一、存放在运行内存中的RAMDirectory,既然放在内存中,也就说明他的声明周期极其短,不过,另一方面也表明他的读取存取速度快。

    二、存放在物理磁盘中的FileSwitchDirectory, FSDirectory, MockDirectoryWrapper, NRTCachingDirectory ,除了FSDirectory外,其他几种是根据环境会发挥出不同的性能的,而FSDirectory相对要智能很多,他会根据目前的环境自行决定他的确切存储方式。

    而Lucene的基本使用流程为:

    一、声明指定Directory ,如:


Directory directory = new RAMDirectory();

    二、创建索引并放入指定Directory,如:

IndexWriter writer = null;
		try {
			writer = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35)));
			writer.deleteAll();
			Document doc = null;
			doc = new Document();
                        doc.add(...); //在此文档添加信息属性等
			writer.addDocument(doc);//创建文档索引
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(writer!=null)writer.close();
			} catch (CorruptIndexException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
    三、读取索引,进行查询:

try {
			IndexReader reader = IndexReader.open(directory);
			IndexSearcher searcher = new IndexSearcher(reader);
			TermQuery query = new TermQuery(new Term(指定属性,查询内容));
//获得查询数据,条数为自定义,以下为10条
			TopDocs tds = searcher.search(query, 10);
			for(ScoreDoc sd:tds.scoreDocs) {
				//查询到的数据进行数据的操作
			}
			reader.close();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
    以上为Lucene搜索的基本流程,更高效率的还要对内容进行分词,同义词处理等。


你可能感兴趣的:(java,Lucene)