Lucene簡述

lucene簡述

1、概述

    1.1 簡介

        lucene是一個利用java編寫的高性能、全功能的開源文本搜索引擎,支持拼寫、突出、分析和符號化功能。因爲java的跨平臺的特性,基本適用於任何項目。例如:電商、文章站的搜索功能。lucene的入門很簡單,高深部分在於索引生成中的分析、符號化功能。java

    1.2 原理簡述

        索引生成:
mysql

        查詢:算法

    1.3 主要依賴類

       a) 通用sql

            org.apache.lucene.analysis.Analyzer:分析器,主要用於將目標信息分解出關鍵字,而後存放在索引文件中。能夠看做是一個搜索算法,網上有不少開源的分析器。apache

            org.apache.lucene.store.Directory:索引存放地址,能夠是內存、也能夠是磁盤文件。性能

            org.apache.lucene.document.Document:一個文檔,用來存放不少field.this

        b)索引生成搜索引擎

            org.apache.lucene.index.IndexWriter:索引生成器,主要的操做類。spa

            org.apache.lucene.document.Field:屬性類,每個目標文件都至關於一個屬性類。code

        c)查詢:

            org.apache.lucene.search.IndexSearcher:搜索器,從索引文件中找到須要的信息。

            org.apache.lucene.search.Query:查詢類,主要記錄咱們須要查詢的:field,關鍵字等條件。

            org.apache.lucene.search.ScoreDoc:查詢結果索引信息,能夠經過這個信息查詢到目標文件的地址。

2、實例

    2.1 寫入

// 索引
	@Test
	public void testIndex() throws Exception {
		Long startTime = System.currentTimeMillis();
		// 分析器<用於解析內容,如今有各類各樣的分詞分析器>
		Analyzer analyzer = new StandardAnalyzer();
		// 索引文件
		// Directory RAMdirectory = new RAMDirectory();// 內存
		// Path path=Paths.get("D:\\project\\test\\lucene");// NIO2的文件系統
		Directory FSdirectory = new SimpleFSDirectory(Paths.get("D:\\project\\test\\lucene"));// 文件系統

		// 索引生成器
		IndexWriterConfig config = new IndexWriterConfig(analyzer);// 配置加入分析器
		IndexWriter indexWriter = new IndexWriter(FSdirectory, config);// 文件和配置

		// 文檔(一個索引:至關於mysql中的一張表)
		Document doc1 = new Document();
		// 內容
		// 索引列一(至關於mysql表中的一列)
		String text1 = " this is a new index";
		doc1.add(new Field("fieldone", text1, TextField.TYPE_STORED));
		// 索引列二
		String text2 = "this is a two index";
		doc1.add(new Field("fieltwo", text2, TextField.TYPE_STORED));
		indexWriter.addDocument(doc1);

		indexWriter.close();
		FSdirectory.close();
		Long endTime = System.currentTimeMillis();
		System.out.println("索引時間:" + (endTime - startTime) + "毫秒");
	}

    2.2 查詢

// 查詢
	@Test
	public void testQuery() throws Exception {
		Long startTime = System.currentTimeMillis();
		// 分析器<用於解析內容,如今有各類各樣的分詞分析器>
		Analyzer analyzer = new StandardAnalyzer();
		// 索引文件
		// Directory RAMdirectory = new RAMDirectory();// 內存
		// Path path=Paths.get("D:\\project\\test\\lucene");// NIO2的文件系統
		Directory FSdirectory = new SimpleFSDirectory(Paths.get("D:\\project\\test\\lucene"));// 文件系統
		// 查詢器
		DirectoryReader ireader = DirectoryReader.open(FSdirectory);// 讀取索引文件
		IndexSearcher isearcher = new IndexSearcher(ireader);// 生成查詢器
		// 查詢<查詢條件>
		QueryParser parse = new QueryParser("fieldone", analyzer);// 解析索引列一
		Query query = parse.parse("index");// 查詢 text 字段
		// 查詢結果
		ScoreDoc[] hits = isearcher.search(query, 1000).scoreDocs;
		for (int i = 0; i < hits.length; i++) {
			Document hitDoc = isearcher.doc(hits[i].doc);
			System.out.println(hitDoc.get("fieldone"));
		}
		Long endTime = System.currentTimeMillis();
		System.out.println("索引時間:" + (endTime - startTime) + "毫秒");
	}
相關文章
相關標籤/搜索