package fold1.lucene;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.DateTools;
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.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.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;
public class Test {
/**
* @param args
* @throws Exception
*/
//要索引的文件目录
String fileDir="D:\\pro\\excise\\WebRoot\\lucetest";
//将索引文件保存的文件目录
String indexDir="D:\\index";
public static void main(String[] args) throws Throwable {
// TODO Auto-generated method stub
Test text=new Test();
text.createSearch();
text.search();
}
public void createSearch() throws Exception{
//创建directory
Directory dir =new SimpleFSDirectory(new File(indexDir));
//创建分词器
Analyzer analyzer=new StandardAnalyzer(Version.LUCENE_30);
//创建IndexWriter对象,第一个参数是Directory,第二个是分词器,第三个表示是否是创建,true创建新的索引,FALSE为追加索引,第四表示表示分词的最大值,比如说new MaxFieldLength(2),就表示两个字一分,一般用IndexWriter.MaxFieldLength.LIMITED
IndexWriter indexwrite=new IndexWriter(dir, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
File[] files=new File(fileDir).listFiles();
for(int i=0;i<files.length;i++){
//创建Document对象
Document doc=new Document();
//创建filed对象 field 就行当予百度搜索出来的一条记录的中一个结构,标题 或者内容或者最后修改时间,而一个document就相当于一条记录
Field field2=new Field("fileName" ,files[i].getName(),Field.Store.YES,Field.Index.NOT_ANALYZED);
Field field1=new Field("content",new FileReader(files[i]));
Field field3=new Field("fileDate",DateTools.dateToString(new Date(), DateTools.Resolution.DAY),Field.Store.YES,Field.Index.ANALYZED);
doc.add(field1);doc.add(field2);doc.add(field3);
indexwrite.addDocument(doc);
}
System.out.println("共建立:"+indexwrite.numDocs()+"条索引");
//对于批量索引进行优化
//indexwrite.optimize();
indexwrite.close();
}
public void search() throws Throwable{
//创建directory
Directory dir =new SimpleFSDirectory(new File(indexDir));
//创建indexSearcher
//创建 IndexSearcher对象,相比IndexWriter对象,这个参数就要提供一个索引的目录就行了
IndexSearcher indexSearch = new IndexSearcher(dir);
//创建queryParse
QueryParser queryparse=new QueryParser(Version.LUCENE_30, "content",new StandardAnalyzer(Version.LUCENE_30));
//创建query对象
Query query =queryparse.parse("content:这是");
//下面边那种方式也可以用 不过局限于单个词,另外有类似于SQL的 Lucene 查询语句 可以在网上查询
//Query q = new TermQuery(new Term("contents", "java"));
//返回符合条件的10条记录
TopDocs hits=indexSearch.search(query, 10);
System.out.println("一共搜到"+hits.totalHits);
//搜索结果 TopDocs里面有scoreDocs[]数组,里面保存着索引值
//循环hits.scoreDocs数据,并使用indexSearch.doc方法把Document还原,再拿出对应的字段的值
for (int i = 0; i < hits.scoreDocs.length; i++) {
ScoreDoc sdoc = hits.scoreDocs[i];
Document doc = indexSearch.doc(sdoc.doc);
System.out.println(doc.get("fileName"));
System.out.println(doc.get("content"));
System.out.println(doc.get("fileDate"));
}
indexSearch.close();
}
}
以上代码是仿照别人的博客写的 ,以下是删除、更新 我没有写把原博客的给搬一下http://langhua9527.iteye.com/blog/582347
分享到:
相关推荐
以上就是关于“lucene创建修改删除组合条件查询”的主要知识点。通过熟练掌握这些操作,开发者可以构建出强大的全文搜索系统,满足各种复杂的查询需求。在实际应用中,还需要注意性能优化,如合理使用索引,以及根据...
Lucene 是一个强大的全文搜索引擎库,通过创建、增加、更新和删除索引来管理文本数据的检索。理解并熟练运用这些操作是构建高效搜索应用的关键。通过 `LuceneTest` 示例代码,开发者可以深入理解这些概念并应用于...
Lucene-创建,删除,搜索,排序
1. **更新与删除**:实时搜索意味着当新的文档被添加或现有文档被修改或删除时,搜索结果应立即反映这些变化。Lucene 提供了 Document 和 IndexWriter 类来实现这一点。添加、删除和更新文档无需重建整个索引。 2. ...
**Lucene实现企业搜索实例** 在企业环境中,高效、精准的搜索能力是至关重要的,它可以帮助员工快速定位信息,提高工作效率。Apache Lucene是一个开源的全文检索库,它提供了强大的文本搜索功能,能够帮助企业构建...
在本项目"Lucene高级搜索进阶项目_03"中,我们将深入探讨Apache Lucene这一强大的全文搜索引擎库。Lucene是Java开发的开源库,它提供...通过这个项目,你将具备使用Lucene创建高效、灵活和可扩展的全文搜索系统的技能。
本文将深入探讨Lucene 4.7.2的特性,包括创建、删除和修改索引,以及高级搜索功能如通用对象搜索、范围搜索、排序和高亮显示。 首先,让我们了解如何利用Lucene 4.7.2创建索引。创建索引是全文检索的基础,它涉及将...
- **索引创建**:LUCENE提供了API来创建索引,包括添加、删除和更新文档。 - **查询解析**:用户输入的查询字符串会被解析成一系列的查询条款。 - **搜索**:使用索引来执行查询,返回相关性最高的文档。 - **...
在这个实例中,我们将深入探讨如何使用Lucene.NET 2.9.2来实现索引的生成、修改、查询和删除。 **一、索引生成** 首先,我们需要创建一个索引,这是全文检索的基础。在Lucene.NET中,我们通常会定义一个文档类,...
1. **创建索引**:首先,需要将要搜索的数据(如文件内容)读取并分词,然后使用Lucene API创建索引。 2. **添加文档**:将分词后的数据作为文档添加到索引中,每个文档都有唯一的ID和多个字段。 3. **更新索引**:...
**Lucene 搜索引擎实现详解** Lucene 是一个开源全文搜索引擎库,由 Apache 软件基金会维护。它提供了一套强大的数据结构和算法,用于高效地存储和检索大量文本数据。通过 Lucene,开发者可以轻松地在自己的应用...
从"lucene3.0.3搜索的使用示例"中,你将学习如何编写代码来完成这些任务,包括索引创建、查询构造、搜索执行以及结果处理等。 在压缩包中的示例代码通常会涵盖这些概念,通过实际运行和调试这些代码,你可以深入...
此外,通过使用Lucene的更新和删除机制,可以确保索引始终与数据源保持同步,保证搜索的准确性。 综上所述,基于Lucene的桌面搜索引擎通过使用强大的分析器和高效的索引技术,实现了在桌面环境中快速、准确地查找...
9. **更新和删除索引**:Lucene支持实时索引更新,可以在添加、修改或删除文档后立即反映到搜索结果中。 10. **优化**:定期进行索引优化可以合并多个段,减少索引碎片,提高搜索性能。 11. **多语言支持**:...
3. **IndexWriter**:用于创建和更新索引,它管理了索引的写入流程,包括添加、删除文档,以及合并段(Segments)以优化性能。 4. **IndexReader和IndexSearcher**:IndexReader用于读取已建立的索引,而...
- **IndexWriter**:用于创建和更新索引,支持批量添加、删除和更新文档。 - **Directory**:类似于文件系统目录,用于存储索引文件,可以是硬盘、内存或其他持久化存储。 - **IndexReader**:读取索引,提供对...
本文将详细介绍如何在Lucene 3.5中进行索引的创建、文档的添加、删除、修改和查询操作。 一、创建索引 1. 初始化环境:首先,我们需要导入Lucene的相关库,包括核心库(lucene-core-3.5.0.jar)、分析库(lucene-...
在这个压缩包文件中,包含的源代码着重展示了如何利用Lucene进行索引创建和搜索操作,这些都是Lucene的核心功能。 首先,让我们了解一下Lucene的索引创建过程。在Lucene中,数据被转化为一种便于搜索的结构——倒排...