欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lucene搜索引擎入门

程序员文章站 2024-02-27 19:30:39
...

        一、什么是搜索?

               查找,搜寻。在It行业,指的是用户输入关键字,然后通过相应的算法,找到对应的结果。

        二、什么是搜索引擎?

               可以给用户提供检索服务的系统。

       三、搜索引擎解决了哪些问题?

                1、当我们在数据库进行模糊查找的话,数据库会根据查询条件对数据一条一条的对比,效率比较低。

                2、sql的模糊查找满足不了用户的需求。   

       四、什么是Lucene?

                lucene是Apache旗下的开源项目,是一款实现全文搜索的工具包(Api),不是搜索引擎产品。

       五、全文检索

                全文检索就是针对我们要搜索的文档内容进行分词,然后针对这次词条创建索引,用户输入关键字找到对应的词条,通过这个词找到对应的文档。

       六、Lucene使用的原理。

                倒排索引(反向索引):

                就是把字或者词当成关键字,搜索的时候根据关键字找到对应文档Id,根据文档对象的Id找到对应文档。

                这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属

                性值来确定记录的位置,因而称为倒排索引(inverted index)。

                Lucene搜索引擎入门

       七、Lucene存储原理

               在Lucene索引库中每一条数据对应一个文档,纪录中的每个字段对应文档的Filed,具体数据是在Field中存储

        八、java中Lucene使用

               1、往索引库中添加数据

       
// 定义索引库的位置
	private static final String INDEX_PATH = "D:/develop/work/temp/index";
	
	@Test
	public void indexCreate() throws IOException {
		// 准备数据  数据封装在Document对象中
		Document doc = new Document();
		//数据有不同字段,字段类型也不同
		//LongField IntField DoubleField....
		// StringField(索引但是默认不分词,数据被当成一个词条), Term(词条)
		// TextField(索引并且根据索引写入器中定义的分词器来进行分词,数据被当做多个词条)
		LongField id = new LongField("id", 1L, Store.YES);
		doc.add(id);
//		TextField title = new TextField("title", "谷歌地图之父跳槽FaceBook", Store.YES);

		doc.add(title);
		
		// 创建目录对象,指定索引库的存放位置;FSDirectory文件系统;RAMDirectory内存
		Directory directory = FSDirectory.open(new File(INDEX_PATH));
		// 创建分词器对象
//		StandardAnalyzer analyzer = new StandardAnalyzer();
		Analyzer analyzer = new IKAnalyzer();
		// 创建索引写入器配置对象,第一个参数版本VerSion.LATEST,第一个参数分词器
		IndexWriterConfig conf = new IndexWriterConfig(Version.LATEST, analyzer);
		// 创建索引写入器
		IndexWriter indexWriter = new IndexWriter(directory , conf);
		// 向索引库写入文档对象
//		indexWriter.addDocument(doc);
		List<Document> docs = new ArrayList<Document>();
		docs.add(doc);
		//批量添加索引
		indexWriter.addDocuments(docs);
		// 提交
		indexWriter.commit();
		// 关闭
		indexWriter.close();
	}