文件索引库和内存索引库的交互
来源:互联网 发布:网购网络诈骗 编辑:程序博客网 时间:2024/04/28 07:42
package cn.itcast.lucene.directory;import java.io.File;import java.util.ArrayList;import java.util.List;import org.apache.lucene.document.Document;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriter.MaxFieldLength;import org.apache.lucene.queryParser.MultiFieldQueryParser;import org.apache.lucene.queryParser.QueryParser;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.ScoreDoc;import org.apache.lucene.search.TopDocs;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.store.RAMDirectory;import org.apache.lucene.util.Version;import org.junit.Test;import cn.itcast.lucene.domain.Article;import cn.itcast.lucene.util.DocumentUtils;import cn.itcast.lucene.util.LuceneUtils;/** * 1.能不能设置多个索引库 * 可以设置多个索引库 一个索引库对应一个IndexWriter * 2.索引库能不能合并 * 如果是内存索引库 Directory ramDirectory = new RamDirectory(Directory d); * 这样就可以把一个索引库放入到内存索引库中 * 利用IndexWriter.addIndexesNoOptimize方法可以把很多个索引库进行合并操作 * * 3. * * @author lenovo * */public class DirectoryTest {/** * 内存索引库 * 1.速度比较快 * 2.数据时暂时的 * 3.内存索引库和文件索引库的特点正好互补 * @throws Exception */@Testpublic void testRam() throws Exception{Directory directory = new RAMDirectory();IndexWriter indexWriter = new IndexWriter(directory,LuceneUtils.analyzer,MaxFieldLength.LIMITED);Article article = new Article();article.setId(1L); article.setTitle("lucene可以做搜索引擎"); article.setContent("百度,googled都是很好的"); indexWriter.addDocument(DocumentUtils.article2Document(article)); indexWriter.close(); this.showData(directory);}private void showData(Directory directory) throws Exception{IndexSearcher indexSearcher = new IndexSearcher(directory);QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30,new String[]{"title","content"},LuceneUtils.analyzer);Query query = queryParser.parse("lucene");TopDocs topDocs = indexSearcher.search(query,10);ScoreDoc [] scoreDocs = topDocs.scoreDocs;List<Article> articleList = new ArrayList<Article>();for(ScoreDoc scoreDoc:scoreDocs){Document document = indexSearcher.doc(scoreDoc.doc);articleList.add(DocumentUtils.document2Article(document));}//打印for(Article article:articleList){System.out.println(article.getId());System.out.println(article.getTitle());System.out.println(article.getContent());}}/** * 文件索引库和内存索引库的结合 */@Testpublic void testRamAndFile() throws Exception{/* * 当应用程序启动的时候,把文件索引库的内容复制到内存库中 * 让内存索引库和应用程序交互 * 把内存索引库的内容同步到文件索引库 */Directory fileDirectory = FSDirectory.open(new File("./indexDir"));Directory ramDirectory = new RAMDirectory(fileDirectory);IndexWriter ramIndexWriter = new IndexWriter(ramDirectory,LuceneUtils.analyzer,MaxFieldLength.LIMITED);IndexWriter fileIndexWriter = new IndexWriter(fileDirectory,LuceneUtils.analyzer,true,MaxFieldLength.LIMITED);//ture是进行覆盖操作 默认是FALSE 追加的// 在内存索引库中根据关键词查询this.showData(ramDirectory);System.out.println("上面的是从内存索引库中查询出来的");/** * 把一条信息插入到内存索引库 */Article article = new Article();article.setId(1L);article.setTitle("lucene可以做搜索引擎");article.setContent("baidu,google都是很好的搜索引擎");ramIndexWriter.addDocument(DocumentUtils.article2Document(article));ramIndexWriter.close();/* * 把内存索引库中的内容同步到文件索引库中 */fileIndexWriter.addIndexesNoOptimize(ramDirectory);fileIndexWriter.close();this.showData(fileDirectory);System.out.println("上面的是从文件索引库中查询出来的");}}
package cn.itcast.lucene.util;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.document.Field.Index;import org.apache.lucene.document.Field.Store;import cn.itcast.lucene.domain.Article;public class DocumentUtils {public static Document article2Document(Article article){Document document = new Document();Field idField = new Field("id",article.getId().toString(),Store.YES,Index.NOT_ANALYZED);Field titleField = new Field("title",article.getTitle(),Store.YES,Index.ANALYZED);Field contentField = new Field("content",article.getContent(),Store.YES,Index.ANALYZED);document.add(idField);document.add(titleField);document.add(contentField);return document;}public static Article document2Article(Document document){Article article = new Article();article.setId(Long.parseLong(document.get("id")));article.setTitle(document.get("title"));article.setContent(document.get("content"));return article;}}
package cn.itcast.lucene.util;import java.io.File;import java.io.IOException;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;public class LuceneUtils {public static Directory directory;public static Analyzer analyzer;static{try {directory = FSDirectory.open(new File("./indexDir"));analyzer = new StandardAnalyzer(Version.LUCENE_30);} catch (IOException e) {e.printStackTrace();}}}
0 0
- 文件索引库和内存索引库的交互
- 文件索引库与内存索引库的结合
- Lucene-与索引库的交互
- Lucene的内存索引和磁盘索引
- 索引在文件和内存中的数据结构(索引阶段)
- lucene学习 内存索引库和文件索引库结合
- solr索引库添加新的索引,使用json文件或者xml文件的数据
- Lucene索引在文件和内存中的数据结构
- 索引在文件和内存中的数据结构(搜索阶段)
- lucene的索引文件
- lucene的索引文件
- 索引文件的操作
- 索引文件的操作
- lucene内存索引库、分词器
- Lucene学习笔记-内存与文件索引的简单操作
- 库索引
- 删除索引、索引库、数据项
- Windows 2007的文件库(方便的索引)
- Redhat6 使用 yum源
- Android 常用知识点整理
- Caused by: org.xml.sax.SAXParseException: Attribute "xmlns" must be declared for element type "beans
- 第三章作业(第四周)上
- 人在大三
- 文件索引库和内存索引库的交互
- LoadRunner 12 发布,主推云
- java回调函数
- Product_user_profile表
- 解决spring配置文件解析错误
- 腾讯2014年春季笔试题
- The prefix "tx" for element "tx:advice" is not bound 错误的说明
- android知识点
- 通过ssh开启代理[1]xshell开socket代理