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:构建高效文本分析系统》 在信息技术领域,文本处理是数据挖掘和信息检索中的重要一环。Lucene和JE-Analysis是两个强大的开源工具,用于实现高效的全文检索和文本分析。本文将深入...
IKAnalyzer 是一个开源的中文分词器,专为 Java 开发,被广泛用于 Lucene 和 Elasticsearch 等搜索引擎中。它支持多种分词模式,包括精确模式、全模式、最短路径模式等,以满足不同场景的需求。IKAnalyzer 还具备自...
- Lucene内置了一些中文分词器,如SmartChineseAnalyzer。 - 可以根据不同的应用场景选择合适的分词器。 - **5.1.2 Lietu中文分词的使用** - Lietu是一款中文分词工具,支持自定义词典等功能。 - 可以灵活应用...
Lucene提供了文本分析、索引和搜索功能,对于构建文本分类器至关重要。在这个版本中,它可能包含了基础的分词、停用词过滤、词干提取等功能,这些都是预处理文本数据的常用步骤,以减少噪音并提取关键特征。 其次,...
在机器学习领域,贝叶斯分类器被广泛应用于文本分类、垃圾邮件过滤等场景。 ### 两类问题与正态分布 根据题目描述,这里涉及到的是两类问题,即二分类问题。具体而言,在贝叶斯分类器中,我们需要估计每个类别下...
例如,`Lucene`提供了分词器(Tokenizer)和过滤器(Filter)类,用于进行基本的预处理操作。 接着,我们需要构建词汇表(Vocabulary)。这个过程涉及到将所有预处理后的单词映射到唯一的ID,以便在计算机中表示...
- **查询优化**:利用OpenSearch的查询语法和过滤器来精确匹配查询,减少不必要的计算。 - **监控和报警**:通过OpenSearch的监控工具和日志分析,可以实时了解模型索引的健康状况,及时发现和解决问题。 综上所述...
"lucene-core-2.3.2.jar"可能包含了对朴素贝叶斯分类器的支持,Lucene是一个强大的全文搜索引擎库,它内部实现了多种文本处理和分类算法。 在实际应用中,使用FMM进行预处理得到分词结果后,这些词语会转化为数值...
在文本处理中,分类器常用于情感分析、主题识别、垃圾邮件过滤等任务。常见的分类算法有朴素贝叶斯、决策树、支持向量机(SVM)、随机森林等。这些算法通过学习训练数据集中的模式,形成分类规则,从而对新数据进行...
4. **自定义分析器**:ES允许开发人员自定义分析器,以适应不同的文本处理需求,例如中文分词。 5. **多模态搜索**:除了文本搜索,ES还可以处理数值、日期和地理位置等多种数据类型,实现多模态搜索。 **Spark ...
这个任务在信息检索、情感分析、垃圾邮件过滤等多个场景中都有广泛的应用。Java作为一种通用且广泛应用的编程语言,提供了丰富的库和工具来实现文本分类。 一、文本分类基本原理 1. **特征提取**: 文本分类的第一...
Mahout作为一个用Java实现的开源机器学习库,自2008年起经历了从Lucene子项目到Apache顶级项目的转变,旨在提供可扩展的机器学习算法,支持聚类、分类和协同过滤等任务,且能在单机或Hadoop平台上运行。 Mahout支持...
在Java环境中,实现文本分类可能会用到诸如Apache OpenNLP、Stanford NLP或者Apache Lucene等库。这些库提供了丰富的功能,包括分词、词性标注、句法分析和实体识别,为构建文本分类系统提供了便利。开发过程中,...
这些资源可能包括词典、分词器、句法分析器、情感分析工具、命名实体识别(NER)模型和其他语言处理组件。 标签虽为空,但我们可以根据标题和描述推测,可能的标签包括“Java”、“NLP”、“希伯来语”、“资源”和...
Apache Mahout是一个用Java开发的开源机器学习库,起源于Apache Lucene项目,后来成为Apache软件基金会的顶级项目。自2008年以来,Mahout经历了从搜索引擎的子项目到独立的机器学习平台的转变。它旨在提供一个可扩展...
- **过滤与切片**:支持复杂的过滤逻辑,以便更精确地定位所需数据。 - **自动补全**:提供自动补全功能以提高用户体验。 - **优化的数据类型支持**:针对文本和地理数据进行了优化处理,确保数据的有效利用。 - **...
Elasticsearch是一款开源的全文搜索引擎,基于Lucene构建,提供了分布式的实时分析搜索功能。其核心特性包括: 1. **分布式**: 支持多节点部署,能自动进行数据分片和复制,保证系统的高可用性和容错性。 2. **实时...
Logstash的过滤器插件可以用来清洗、标准化数据,甚至执行初步的分析,如情绪分析或关键词提取。 **Kibana** Kibana是Elasticsearch的数据可视化界面,提供了一个交互式的平台,让用户可以通过仪表板来探索、理解...