Lucene中的Ram存储

package com.fxr.demo3;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;

public class TestRamSearcher {

    Directory directory=new RAMDirectory();

    public void creatRamIndex() throws IOException{
    	String [] ids={"1","2","3","4"};
		String [] names={"ZHangsan","lisi","wangwu","zhaoliu"};
		String [] addresses={"tianjing","nanjing","beijing","nanning"};
		String [] birthdays={"19820720","19840203","19770409","19830130"};
		Analyzer analyzer=new StandardAnalyzer();

		//true 表示创建或覆盖当前索引;false表示对当前索引进行追加
		//Default value is 128
		IndexWriter writer=new IndexWriter(directory,analyzer,true,IndexWriter.MaxFieldLength.LIMITED);

		for(int i=0;i<ids.length;i++){
			Document document=new Document();
			document.add(new Field("id",ids[i],Field.Store.YES,Field.Index.ANALYZED));
			document.add(new Field("name",names[i],Field.Store.YES,Field.Index.ANALYZED));
			document.add(new Field("address",addresses[i],Field.Store.YES,Field.Index.ANALYZED));
			document.add(new Field("birthday",birthdays[i],Field.Store.YES,Field.Index.ANALYZED));
		    writer.addDocument(document);
		}

		writer.optimize();

		writer.close();
	    System.out.println("ok");
	}

    public void searchRam() throws CorruptIndexException, IOException{
    	IndexSearcher searcher=new IndexSearcher(directory);
		ScoreDoc [] hits=null;
		Term term=new Term("address","nanjing");
		TermQuery query=new TermQuery(term);
		TopDocs topDocs=searcher.search(query, 100);
		hits=topDocs.scoreDocs;
		for(int i=0;i<hits.length;i++){
			Document doc=searcher.doc(hits[i].doc);
		    System.out.print(hits[i].score+" ");
			System.out.print(doc.get("id")+" ");
			System.out.print(doc.get("name")+" ");
			System.out.print(doc.get("address")+" ");
			System.out.println(doc.get("birthday")+" ");
		}
		searcher.close();
		directory.close();

	}

	public static void main(String[] args) throws Exception {
		TestRamSearcher trs=new TestRamSearcher();
		trs.creatRamIndex();
		trs.searchRam();
	}

}

  Lucene中的另一种写法:

package com.fxr.demo3;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocCollector;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class TestTopDocCollectller {

	public static void main(String[] args) throws IOException {
		Analyzer analyzer = new StandardAnalyzer();
		String indexDir = "f:/lucenefxrindex";
		Directory dir=FSDirectory.getDirectory(indexDir);//索引存放的位置
		IndexSearcher indexSearcher = new IndexSearcher(dir);
		ScoreDoc[]hits = null;
		TopDocCollector topDocCollector = new TopDocCollector(10);
		Term term = new Term("address","zhengzhou");
		TermQuery query = new TermQuery(term);
		indexSearcher.search(query,topDocCollector);
		hits = topDocCollector.topDocs().scoreDocs;
		for(int i=0;i<hits.length;i++){
			Document doc = indexSearcher.doc(hits[i].doc);
			System.out.print(hits[i].score+" ");
			System.out.print(doc.get("id")+" ");
			System.out.print(doc.get("name")+" ");
			System.out.println(doc.get("address")+" ");

		}
		indexSearcher.close();
		dir.close();

	}

}

  

时间: 2024-11-06 23:22:41

Lucene中的Ram存储的相关文章

[Elasticsearch] 控制相关度 (二) - Lucene中的PSF(Practical Scoring Function)与查询期间提升

本章翻译自Elasticsearch官方指南的Controlling Relevance一章. Lucene中的Practical Scoring Function 对于多词条查询(Multiterm Queries),Lucene使用的是布尔模型(Boolean Model),TF/IDF以及向量空间模型(Vector Space Model)来将它们结合在一起,用来收集匹配的文档和对它们进行分值计算. 像下面这样的多词条查询: GET /my_index/doc/_search { "que

【转载】lucene中Field.Index,Field.Store详解

lucene在doc.add(new Field("content",curArt.getContent(),Field.Store.NO,Field.Index.TOKENIZED)); Field有两个属性可选:存储和索引. 通过存储属性你可以控制是否对这个Field进行存储: 通过索引属性你可以控制是否对该Field进行索引. 事实上对这两个属性的正确组合很重要. Field.Index Field.Store 说明 TOKENIZED(分词) YES 被分词索引且存储 TOKE

java中变量的存储位置

1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中.) 3. 堆:存放所有new出来的对象. 4. 静态域:存放静态成员(static定义的) 5. 常量池:存放字符串常量和基本类型常量(public static final). 6. 非RAM存储:硬盘等永久存储空间 这里我们主要关心栈,堆和常量池,对于栈和常量池中的对象

03.Lucene中的常用类

Document Document是文档或者数据的抽象,它包含很多的Field域对象(可以重复),最终是要被持久化保存到索引库中的 Field Lucene中的域对象,是对原始数据的切割,如:文件名,文件内容,文件大小等.域对象可以指定是否分词,是否索引和是否存储.不分词则会以一个完整的字段出现在索引中(如:商品id.订单号.身份证号等):不索引则不会被检索到,那么分词也没有了意义,但是可以存储(如:文件路径.图片路径等,不用作为查询条件的不用索引):不存储也可以被检索到,这取决于这个Field

Lucene 中自定义排序的实现

使用Lucene来搜索内容,搜索结果的显示顺序当然是比较重要的.Lucene中Build-in的几个排序定义在大多数情况下是不适合我们使用的.要适合自己的应用程序的场景,就只能自定义排序功能,本节我们就来看看在Lucene中如何实现自定义排序功能. Lucene中的自定义排序功能和Java集合中的自定义排序的实现方法差不多,都要实现一下比较接口. 在Java中只要实现Comparable接口就可以了.但是在Lucene中要实现SortComparatorSource接口和 ScoreDocCom

lucene 中关于Store.YES 关于Store.NO的解释

总算搞明白 lucene 中关于Store.YES  关于Store.NO的解释了 一直对Lucene Store.YES不太理解,网上多数的说法是存储字段,NO为不存储. 这样的解释有点郁闷:字面意思一看就明白,但是不解. 之前我的理解是:如果字段可以不存储,那要怎么搜索这个不存储的字段呢? 原来Lucene就是这样,可以设置某些字段为不存储,但是可以用来检索. 终于在一篇文章里看到这几句话,突然间就明白了. //Store.YES 保存 可以查询 可以打印内容 Field storeYes

lucene源代码学习之LZ4压缩算法在lucene中应用

LZ4算法又称为Realtime Compression Algorithm,在操作系统(linux/freeBSD).文件系统(OpenZFS).大数据(Hadoop).搜索引擎(Lucene/solr).数据库(Hbase)--都可以看到它的身影,可以说是一个非常通用的算法.LZ4最突出的地方在于它的压缩/解压速度. 基础知识 理解Lucene中LZ4算法的实现,需要有以下两点基础知识: 1. 理解Lucene里面的packedInts. 关于PacedInts,可以参考http://sbp

浅谈Lucene中的DocValues

前言: 在Lucene4.x之后,出现一个重大的特性,就是索引支持DocValues,这对于广大的solr和elasticsearch用户,无疑来说是一个福音,这玩意的出现通过牺牲一定的磁盘空间带来的好处主要有两个: (1)节省内存 (2)对排序,分组和一些聚合操作时能够大大提升性能 下面来详细介绍下DocValue的原理和使用场景 (一)什么是DocValues? DocValues其实是Lucene在构建索引时,会额外建立一个有序的基于document => field value的映射列表

Lucene中的 Query对象

"Lucene中的 Query对象": 检 索前,需要对检索字符串进行分析,这是由queryparser来完成的.为了保证查询的正确性,最好用创建索引文件时同样的分析器. queryparser解析字符串时,可以指定查询域,实际可以在字符串中指定一个或多个域.例如:“info:电视台 and id:3329”,“info:电视台”,“电视台”,假如不指定默认域,就会在默认域查询. queryparser调用静态方法parse后会返回query的实例,原子查询.例如:“info:电视台