`
JLK
  • 浏览: 236181 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Lucene实现在检索结果中再检索

    博客分类:
  • solr
阅读更多

Lucene是可以做到的,利用lucene的Filter,具体可以查看lucene的api中的org.apache.lucene.search.CachingWrapperFilter,它可以缓存上次的搜索结果,从而实现在结果中的搜索。

测试实例:
package com.wsjava;
import java.io.IOException;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.CachingWrapperFilter;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.QueryFilter;

public class IndexTest {

        /**
         * @param args
         * @throws ParseException 
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException, ParseException {
                index();
                search("day"); //简单搜索
                searchInResult("day", "you"); //在结果集中搜索
        }
        
        public static void index() throws IOException {
                IndexWriter writer = new IndexWriter("d:/tesindex",new SimpleAnalyzer(), true);
                writer.setMaxMergeDocs(1000);
                writer.setMergeFactor(100);
                for (int i = 0; i < 10; i++) {
                        Document doc = new Document();
                        String content = "How do you do?";
                        if (i >= 5) {
                                content = "What's a good day. ";
                        }
                        if (i >= 7) {
                                content = "Nice day. Thanks you!";
                        }
                        doc.add(new Field("content", content, Field.Store.YES,Field.Index.TOKENIZED));
                        writer.addDocument(doc);
                }

        }
        
        //简单实现对qw的搜索.
        public static void search(String qw) throws IOException, ParseException {
                QueryParser queryParser = new QueryParser("content",new SimpleAnalyzer());
                Query query = queryParser.parse(qw.trim());
                QueryFilter filter = new QueryFilter(query);
                
                search(query, filter);
        }
        
        //在搜索oldqw的结果集中搜索qw.
        public static void searchInResult(String qw, String oldqw) throws ParseException, IOException {                
                QueryParser queryParser = new QueryParser("content",new SimpleAnalyzer());
                Query query = queryParser.parse(qw.trim());
                Query oldQuery = queryParser.parse(oldqw.trim());
                QueryFilter oldFilter = new QueryFilter(oldQuery);
                CachingWrapperFilter filter = new CachingWrapperFilter(oldFilter);
                
                search(query, filter);
        }
        
        private static void search(Query query, Filter filter) throws IOException, ParseException {
                IndexSearcher ins = new IndexSearcher("d:/tesindex");
                Hits hits = ins.search(query, filter);
                for (int i = 0; i < hits.length(); i++) {
                        Document doc = hits.doc(i);
                        System.out.println(doc.get("content"));
                }
                System.out.println();
        }
}

分享到:
评论

相关推荐

    lucene实现文件检索Demo

    lucene实现文件检索Demo,

    android+lucene实现全文检索并高亮关键字

    在Android平台上实现全文检索并高亮关键字是一项技术挑战,但通过集成Apache Lucene库,可以有效地...在实现过程中,需要注意资源管理、性能优化以及错误处理,确保在有限的Android环境中实现高效、稳定的全文检索。

    Lucene.Net 实现全文检索

    总的来说,Lucene.Net 在 .Net MVC4 上实现全文检索是一个涉及数据库交互、索引构建、查询处理和结果展示的综合过程。通过熟练掌握 Lucene.Net 的使用,可以为用户提供高效、准确的全文搜索体验。

    中文分词及其在基于Lucene的全文检索中的应用

    《中文分词及其在基于Lucene的全文检索中的应用》这篇论文主要探讨了中文分词在全文检索系统,特别是基于Lucene平台的应用。全文检索技术是现代信息检索领域的重要组成部分,而Lucene作为一款开源的全文检索引擎框架...

    基于lucene的全文检索系统

    它提供了一个简单但功能强大的API,可以帮助开发者快速地在大量文档中实现高效的全文检索功能。在这个基于Struts2的全文检索系统中,Lucene扮演了核心的角色,负责文本的索引和查询。 **Struts2框架** Struts2是一...

    Lucene实现小型信息检索系统

    利用Lucene接口编写简单的信息检索系统,实现对本地目录建立索引和搜索功能。代码包含两个JSP页面,放入tomcat的webapp目录中即可在浏览器中运行程序。选择文档路径时如若涉及浏览器权限问题,可直接输入。

    利用lucene实现文档关键字检索

    在这个使用案例中,我们将深入探讨如何利用Lucene实现对Word文档中的关键字检索并高亮显示结果。 首先,我们需要理解Lucene的基本工作原理。Lucene通过建立倒排索引(Inverted Index)来加速查询。倒排索引是一种...

    Lucene4 全文检索

    通过将数据库记录映射为 Lucene 的 Document,可以在不离开数据库环境的情况下实现全文检索。例如,可以使用 JDBC 连接数据库,读取记录并转换为 Document,然后进行索引。 ### 4. 实例应用 在实际项目中,我们...

    Lucene检索数据库支持中文检索

    ### Lucene检索数据库支持中文检索 #### 一、Lucene简介与原理 ##### 1. Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,由Java编写而成。其核心功能是为开发者提供构建搜索应用程序的基础框架。Lucene...

    Lucene全文检索引擎

    Lucene是Apache软件基金会的一个开源项目,它是一个高性能、全文本搜索引擎库,可以被集成到各种应用中实现全文检索功能。Lucene提供了完整的搜索功能实现,包括索引创建、文档存储、查询解析和结果排序等。它的设计...

    Lucene实现全文检索功能FileUtil类

    Lucene实现全文检索功能

    lucene实现企业产品检索

    在实现企业产品检索时,我们需要先将产品信息转换为Lucene可处理的索引格式。这包括创建`IndexWriter`对象,设置合适的分词器(如庖丁解牛),然后逐条读取产品信息,使用`Document`对象存储每条产品的字段(如产品...

    paoding+lucene实现全文检索功能简单实例

    在实现这个简单实例的过程中,首先需要集成Paoding和Lucene到你的项目中。安装完成后,你需要创建一个索引器,使用Paoding对输入的文本进行分词,然后用Lucene的API将这些词构建为索引。索引过程通常包括打开读写器...

    使用Lucene对doc、docx、pdf、txt文档进行全文检索功能的实现 - 干勾鱼的CSDN博客 - CSDN博客1

    在Java开发中,Lucene被广泛用于实现文件的全文检索功能,包括对doc、docx、pdf、txt等常见格式文档的文本内容检索。在本文中,我们将探讨如何使用Lucene对这些文件类型进行全文检索的实现。 首先,为了实现全文...

    lucene 全文检索

    在给定的压缩包中,`src` 文件夹可能包含了Lucene的Java源代码示例,`WebRoot` 可能是Web应用程序的根目录,这表明示例可能是如何在Web环境下集成Lucene进行全文检索的。`.classpath`、`.project` 和 `.settings` ...

    android+lucene实现全文检索并高亮关键字索引库

    下面我们将深入探讨如何在Android环境中利用Lucene来创建一个高效、功能丰富的全文检索系统,并了解如何高亮显示搜索结果中的关键字。 首先,我们要理解全文检索的基本原理。全文检索是指通过建立倒排索引来快速...

    基于Lucene的全文检索系统研究与开发

    基于Jakarta Lucene的全文检索系统模型为非结构化数据提供了高效、灵活的检索手段,相比传统的数据库检索技术和Google的站内检索技术,它在关键字拆分、信息检索速度以及结果排序等方面展现出了显著优势。...

Global site tag (gtag.js) - Google Analytics