`
smallearth
  • 浏览: 37520 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Lucene小练十五(过滤器)

 
阅读更多
package Java.se.lucene;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.NumericField;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;

public class Test_Index {

	private Analyzer analyzer=new IKAnalyzer();
	private static Directory directory=null;
	static{
		try {
			directory=FSDirectory.open(new File("f:/lucene/Index07"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static Directory getDirectory()
	{
		return directory;
	}
	public void index(boolean hasNew)
	{
		IndexWriter writer=null;
		try {
			  writer=new IndexWriter(directory,new IndexWriterConfig
					(Version.LUCENE_36, analyzer));
			if(hasNew)
			{
				writer.deleteAll();
			}
			File file=new File("F:/lucene/lucenes");
			Document doc=null;
			for(File f:file.listFiles())
			{
				doc=new Document();
				doc.add(new Field("content",new FileReader(f)));//添加内容
				doc.add(new Field("filename",f.getName(),Field.Store.YES,
						Field.Index.NOT_ANALYZED));//添加Name
				doc.add(new Field("path",f.getAbsolutePath(),Field.Store.YES,
						Field.Index.NOT_ANALYZED));
				doc.add(new NumericField("date",Field.Store.YES, true).setLongValue
						(f.lastModified()));
				doc.add(new NumericField("size",Field.Store.YES,true).setIntValue
					((int)f.length()));
				writer.addDocument(doc);
			}
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally
		{
			if(writer!=null)
			{
				try {
					writer.close();
				} catch (CorruptIndexException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
}
package Java.se.lucene;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.TopDocs;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;

public class Test_Search {

	static IndexReader reader=null;
	static{
		try {
			reader=IndexReader.open(Test_Index.getDirectory());
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public IndexSearcher getSearcher()
	{
		 try {
			reader=IndexReader.open(Test_Index.getDirectory());
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		 return new IndexSearcher(reader);
	}
	//返回Searcher
	public void Searcher(String keyword,Sort sort)
	{
		 try {
			 IndexSearcher searcher=getSearcher();
			 //使文件评分显示出来
			 searcher.setDefaultFieldSortScoring(true, false);
			 //在搜索器中使用IKSimilarity相似度评估器
			 searcher.setSimilarity(new IKSimilarity());
			 //创建IK。。 Query
			 Query query =IKQueryParser.parse("content",keyword);
			 TopDocs topDocs=null;
			 if(sort!=null)
			 {
				 topDocs=searcher.search(query, 50, sort); 
			 }else {
				 topDocs=searcher.search(query, 50); 
			}
			 //设置时间格式
			 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			 for(ScoreDoc sds:topDocs.scoreDocs)
			 {
				 Document document=searcher.doc(sds.doc);
				 System.out.println(sds.doc+"-->"+document.get("filename")
						 +"【"+document.get("path")+"】"+"["+document.get("size")
						 +"]"+"("+sds.score+")"+"-->"+sdf.format
						 (new Date(Long.valueOf(document.get("date")))));
			 }
			 searcher.close();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	//过滤
	public void Searcher(String keyword,Filter filter)
	{
		 try {
			 IndexSearcher searcher=getSearcher();
			 //使文件评分显示出来
			 searcher.setDefaultFieldSortScoring(true, false);
			 //在搜索器中使用IKSimilarity相似度评估器
			 searcher.setSimilarity(new IKSimilarity());
			 //创建IK。。 Query
			 Query query =IKQueryParser.parse("content",keyword);
			 TopDocs topDocs=null;
			 if(filter!=null)
			 {
				 topDocs=searcher.search(query,filter,50); 
			 }else {
				 topDocs=searcher.search(query, 50); 
			}
			 //设置时间格式
			 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			 for(ScoreDoc sds:topDocs.scoreDocs)
			 {
				 Document document=searcher.doc(sds.doc);
				 System.out.println(sds.doc+"-->"+document.get("filename")
						 +"【"+document.get("path")+"】"+"["+document.get("size")
						 +"]"+"("+sds.score+")"+"-->"+sdf.format
						 (new Date(Long.valueOf(document.get("date")))));
			 }
			 searcher.close();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
package Java.se.lucene;

import org.apache.lucene.index.Term;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.NumericRangeFilter;
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TermRangeFilter;
import org.apache.lucene.search.WildcardQuery;
import org.junit.Before;
import org.junit.Test;

public class Test_All {
	Test_Index index=null;
	Test_Search search =null;
	@Before
	public void init()
	{
		 index=new Test_Index();
		 search =new Test_Search();
	}
	
	@Test
	public void test_index()
	{
		index.index(true);
	}
	@Test
	public void test_search01()
	{
//		search.Searcher("java", null);
//		//按照默认评分排序
//		search.Searcher("java", new Sort().RELEVANCE);
//		//通过文件ID排序
//		search.Searcher("java", new Sort().INDEXORDER);
//		//通过文件大小排序
//		search.Searcher("java", new Sort(new SortField("size",SortField.INT)));
		//通过文件日期排序
//		search.Searcher("java", new Sort(new SortField("date",SortField.LONG)));
		//通过文件名称排序,第三个参数设置排序方式(true为降序)
//		search.Searcher("java", new Sort(new SortField("filename",SortField.STRING
//			,true)));
		//多条件排序
		search.Searcher("java",new Sort(new SortField("filename",SortField.STRING
				),SortField.FIELD_SCORE));
	}
	
	@Test
	public void test_search02()
	{
		Filter trf=new TermRangeFilter("filename", "Tomcat环境变量配置.kk", 
				"Tomcat环境变量配置.txt.kk", true,true);
		trf=NumericRangeFilter.newIntRange("size", 2, 100000, 
				true, true);
		//通过一个query进行过滤
		trf=new QueryWrapperFilter(new WildcardQuery(new Term("filename","*.kk"))); 
		search.Searcher("java", trf);
	}

}


分享到:
评论

相关推荐

    lucene je-analysis jar包

    《深入理解Lucene与JE-Analysis:构建高效文本分析系统》 在信息技术领域,文本处理是数据挖掘和信息检索中的重要一环。Lucene和JE-Analysis是两个强大的开源工具,用于实现高效的全文检索和文本分析。本文将深入...

    lucene中文检索

    IKAnalyzer 是一个开源的中文分词器,专为 Java 开发,被广泛用于 Lucene 和 Elasticsearch 等搜索引擎中。它支持多种分词模式,包括精确模式、全模式、最短路径模式等,以满足不同场景的需求。IKAnalyzer 还具备自...

    一个专业搜索公司关于lucene+solar资料(1)

    - Lucene内置了一些中文分词器,如SmartChineseAnalyzer。 - 可以根据不同的应用场景选择合适的分词器。 - **5.1.2 Lietu中文分词的使用** - Lietu是一款中文分词工具,支持自定义词典等功能。 - 可以灵活应用...

    贝叶斯文本分类器JAVA

    Lucene提供了文本分析、索引和搜索功能,对于构建文本分类器至关重要。在这个版本中,它可能包含了基础的分词、停用词过滤、词干提取等功能,这些都是预处理文本数据的常用步骤,以减少噪音并提取关键特征。 其次,...

    贝叶斯分类器 matlab

    在机器学习领域,贝叶斯分类器被广泛应用于文本分类、垃圾邮件过滤等场景。 ### 两类问题与正态分布 根据题目描述,这里涉及到的是两类问题,即二分类问题。具体而言,在贝叶斯分类器中,我们需要估计每个类别下...

    基于Java的文本自动分类大作业实现代码

    例如,`Lucene`提供了分词器(Tokenizer)和过滤器(Filter)类,用于进行基本的预处理操作。 接着,我们需要构建词汇表(Vocabulary)。这个过程涉及到将所有预处理后的单词映射到唯一的ID,以便在计算机中表示...

    搜索opensearch model索引

    - **查询优化**:利用OpenSearch的查询语法和过滤器来精确匹配查询,减少不必要的计算。 - **监控和报警**:通过OpenSearch的监控工具和日志分析,可以实时了解模型索引的健康状况,及时发现和解决问题。 综上所述...

    基于正向最大匹配和朴素贝叶斯算法的文本分类源码

    "lucene-core-2.3.2.jar"可能包含了对朴素贝叶斯分类器的支持,Lucene是一个强大的全文搜索引擎库,它内部实现了多种文本处理和分类算法。 在实际应用中,使用FMM进行预处理得到分词结果后,这些词语会转化为数值...

    Information-Retrieval-Classifiers

    在文本处理中,分类器常用于情感分析、主题识别、垃圾邮件过滤等任务。常见的分类算法有朴素贝叶斯、决策树、支持向量机(SVM)、随机森林等。这些算法通过学习训练数据集中的模式,形成分类规则,从而对新数据进行...

    yifanyang-search_recommend-master_Recommend_java_搜索推荐_

    4. **自定义分析器**:ES允许开发人员自定义分析器,以适应不同的文本处理需求,例如中文分词。 5. **多模态搜索**:除了文本搜索,ES还可以处理数值、日期和地理位置等多种数据类型,实现多模态搜索。 **Spark ...

    中文文本分类源代码 使用JAVA

    这个任务在信息检索、情感分析、垃圾邮件过滤等多个场景中都有广泛的应用。Java作为一种通用且广泛应用的编程语言,提供了丰富的库和工具来实现文本分类。 一、文本分类基本原理 1. **特征提取**: 文本分类的第一...

    《大数据》第4章大数据挖掘工具.pptx

    Mahout作为一个用Java实现的开源机器学习库,自2008年起经历了从Lucene子项目到Apache顶级项目的转变,旨在提供可扩展的机器学习算法,支持聚类、分类和协同过滤等任务,且能在单机或Hadoop平台上运行。 Mahout支持...

    tc.rar_Text Categorization_ns.dct_文本分类_文本分类 Java

    在Java环境中,实现文本分类可能会用到诸如Apache OpenNLP、Stanford NLP或者Apache Lucene等库。这些库提供了丰富的功能,包括分词、词性标注、句法分析和实体识别,为构建文本分类系统提供了便利。开发过程中,...

    Java_希伯来语NLP资源的综合列表.zip

    这些资源可能包括词典、分词器、句法分析器、情感分析工具、命名实体识别(NER)模型和其他语言处理组件。 标签虽为空,但我们可以根据标题和描述推测,可能的标签包括“Java”、“NLP”、“希伯来语”、“资源”和...

    大数据挖掘工具培训课件.pptx

    Apache Mahout是一个用Java开发的开源机器学习库,起源于Apache Lucene项目,后来成为Apache软件基金会的顶级项目。自2008年以来,Mahout经历了从搜索引擎的子项目到独立的机器学习平台的转变。它旨在提供一个可扩展...

    02-腾讯云 ES 结合 AI 场景的实践与探索 - 刘忠奇 武汉 2024.03.30

    - **过滤与切片**:支持复杂的过滤逻辑,以便更精确地定位所需数据。 - **自动补全**:提供自动补全功能以提高用户体验。 - **优化的数据类型支持**:针对文本和地理数据进行了优化处理,确保数据的有效利用。 - **...

    ElasticSearch+Spark 构建高相关性搜索服务,千人千面推荐系统

    Elasticsearch是一款开源的全文搜索引擎,基于Lucene构建,提供了分布式的实时分析搜索功能。其核心特性包括: 1. **分布式**: 支持多节点部署,能自动进行数据分片和复制,保证系统的高可用性和容错性。 2. **实时...

    ELK_twitter:这是使用弹性堆栈Elasticsearch,Logstash和Kibana(6.1版)的Twitter(ETL)数据管道

    Logstash的过滤器插件可以用来清洗、标准化数据,甚至执行初步的分析,如情绪分析或关键词提取。 **Kibana** Kibana是Elasticsearch的数据可视化界面,提供了一个交互式的平台,让用户可以通过仪表板来探索、理解...

Global site tag (gtag.js) - Google Analytics