其他代码与添加一致,在添加 doc 时改为如下代码即可
indexWriter.updateDocument(new Term("id",index.getId()), document);
4、搜索 按照单个单词搜索
List<IndexModel> indexModels = new ArrayList<IndexModel>();
Directory directory = null;
try{
directory = FSDirectory.open(indexDir);
IndexSearcher indexSearcher = new IndexSearcher(directory);
//下面的是进行title,content 两个范围内进行收索.
BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD,BooleanClause.Occur.SHOULD ,BooleanClause.Occur.SHOULD};
Query queryOBJ = MultiFieldQueryParser.parse(Version.LUCENE_34, primarkStr, new String[]{"name","password","id"}, clauses, new StandardAnalyzer(Version.LUCENE_34));//parser.parse(query);
Filter filter = null;
//################# 搜索相似度最高的记录 ###################
TopDocs topDocs = indexSearcher.search(queryOBJ, filter, 1000);
//TopDocs topDocs = indexSearcher.search(queryOBJ , 10000);
System.out.println("*** 共匹配:" + topDocs.totalHits + "个 ***");
IndexModel indexModel = null;
//输出结果
for (ScoreDoc scoreDoc : topDocs.scoreDocs){
Document targetDoc = indexSearcher.doc(scoreDoc.doc);
indexModel = new IndexModel();
//设置高亮显示格式
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color='red'><strong>", "</strong></font>");
/* 语法高亮显示设置 */
Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(queryOBJ));
highlighter.setTextFragmenter(new SimpleFragmenter(100));
String name;
name = targetDoc.get("name");
String createTime;
createTime = targetDoc.get("createTime");
String id;
id = targetDoc.get("id");
if(createTime == null){
createTime = "";
}
if(name == null){
name = "";
}
if(id == null){
id = "";
}
TokenStream titleTokenStream = analyzer.tokenStream("name",new StringReader(name));
TokenStream contentTokenStream = analyzer.tokenStream("createTime",new StringReader(createTime));
TokenStream idTokenStream = analyzer.tokenStream("id", new StringReader(id));
String highLightTitle = highlighter.getBestFragment(titleTokenStream, name);
String highLightContent = highlighter.getBestFragment(contentTokenStream, createTime);
String highLightid = highlighter.getBestFragment(idTokenStream, id);
if(highLightTitle == null)
highLightTitle = name;
if(highLightContent == null)
highLightContent = createTime;
if(highLightid == null)
highLightid = id;
indexModels.add(indexModel);
}
indexSearcher.close();
return indexModels;
}catch(Exception e){
e.printStackTrace();
return null;
}
分享到:
相关推荐
2. **Lucene API**:详细讲解了Lucene的各个核心组件,如Analyzer(分析器)用于处理文本,Document(文档)用于存储数据,IndexWriter(索引写入器)用于创建和更新索引,以及Searcher(搜索器)用于执行查询。...
2.MUST和MUST_NOT:表示查询结果中不能包含MUST_NOT所对应得查询子句的检索结果。 3.MUST_NOT和MUST_NOT:无意义,检索无结果。 4.SHOULD与MUST、SHOULD与MUST_NOT: SHOULD与MUST连用时,无意义,结果为MUST子句...
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
"lucene学习pdf2" 提供的文档,无疑是对Lucene深入理解的一把钥匙,它涵盖了Lucene的核心概念、操作流程以及高级特性。 首先,Lucene的基础知识是必不可少的。Lucene的核心在于索引和搜索,它将非结构化的文本数据...
2. **安装与配置**:详细讲解如何在Java环境中集成Lucene,包括依赖管理和配置设置,以及如何创建一个基本的搜索应用。 3. **文本处理**:探讨如何对输入文本进行预处理,如分词、去除停用词、词干提取等,以提高...
《Lucene in Action 2nd Edition》是一本深入探讨Apache Lucene搜索引擎库的权威书籍,由Manning出版社在2010年发行。这本书详细介绍了如何利用Java编程语言来构建高性能、可扩展的全文检索应用。Lucene是Apache软件...
2. **搜索算法**:Lucene实现了布尔、短语、模糊、评分等高级搜索算法,使得用户可以灵活地构造复杂的查询条件。 3. **高性能**:Lucene通过内存缓存、位向量和优化的数据结构来提高搜索速度。同时,它支持多线程...
2. **分词器(Tokenizer)与过滤器(Filter)**:Lucene支持自定义的分词规则,如`StandardTokenizer`和`LowerCaseFilter`。这些在`analysis`包下的源码中可以找到,它们负责将原始文本转换为可搜索的术语。 3. **...
2. **Lucene索引过程** 索引过程包括分析、分词、倒排索引等步骤。分析是将原始文本拆分为有意义的单元(如单词),分词是将文本转化为可索引的单元。倒排索引是Lucene的核心,它将每个词对应到包含该词的文档列表...
2. 作者包括Michael McCandless、Erik Hatcher和Otis Gospodnetic,他们都是Lucene核心贡献者,因此书中内容是权威和专业的。特别是对于Lucene的内部工作原理,他们能提供深入而详细的解释。 3. Doug Cutting是本书...
《Lucene实战源码(Lucene in Action Source Code)part2》是针对知名搜索库Lucene的一份重要学习资源,其包含的是书籍《Lucene in Action》中的实践代码,主要聚焦于Lucene的深入理解和应用。这个压缩包的第二部分...
Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及...
《Annotated Lucene 中文版 Lucene源码剖析》是一本深入探讨Apache Lucene的书籍,专注于源码解析,帮助读者理解这个强大的全文搜索引擎库的工作原理。Lucene是一款开源的Java库,它提供了高效的文本搜索功能,被...
【Lucene 简介】 Lucene 是一个强大的开源全文搜索库,由 Java 编写,主要用于为应用程序添加全文检索功能。它不是一个完整的全文搜索引擎应用,而是一个工具包,允许开发者将其集成到自己的软件中,以实现高效、...
**Lucene 2.0 API 和 Lucene 3.0 API 深度解析** Lucene 是一个由 Apache 软件基金会开发的全文搜索引擎库,它为开发者提供了在 Java 应用程序中实现高性能、可扩展的全文搜索功能的能力。Lucene 的 API 设计得相当...
2. **文档(Document)**:在Lucene中,一个文档代表要被搜索的信息源,可以是网页、电子邮件、数据库记录等。文档由多个字段(Field)组成,每个字段有特定的名称和内容。 3. **字段(Field)**:字段是文档的组成...
在IT领域,搜索引擎技术是至关重要的,而Lucene作为一个开源全文搜索引擎库,广泛应用于各种文本检索系统中。本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、...
2. **设置Query解析器**:`var queryParser = new QueryParser(LuceneVersion.LUCENE_30, "content", analyzer);` 3. **获取高亮片段**:`var query = queryParser.Parse(queryText);`,然后使用`highlighter....
2. **analyzers jar包**:用于文本分析,将输入的文本转换为可搜索的项。例如,`lucene-analyzers-common-4.9.0.jar`包含了多种常见的分析器,如标准分析器、简体中文分析器等。 3. **queryparser jar包**:提供了...