使用Lucene,在搜索结果中找到匹配的推荐方法是什么?

更具体地说,假设索引文档具有字段“fullText”,其存储某些文档的纯文本内容.此外,假设对于这些文件中的一个,内容是“快速的棕色狐狸跳过懒狗”.接下来,搜索“狐狸狗”.显然,这份文件很受欢迎.

在这种情况下,Lucene可以用来提供类似于找到文档的匹配区域吗?所以对于这种情况,我想生产类似的东西:

[{match: "fox",startIndex: 10,length: 3},{match: "dog",startIndex: 34,length: 3}]

我怀疑它可以通过org.apache.lucene.search.highlight包中提供的内容来实现.我不确定整体方法……

解决方法

我使用的是TermFreqVector.这是一个工作演示,它打印术语位置,以及起始和结束术语索引:
public class Search {
    public static void main(String[] args) throws IOException,ParseException {
        Search s = new Search();  
        s.doSearch(args[0],args[1]);  
    }  

    Search() {
    }  

    public void doSearch(String db,String querystr) throws IOException,ParseException {
        // 1. Specify the analyzer for tokenizing text.  
        //    The same analyzer should be used as was used for indexing  
        StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);  

        Directory index = FSDirectory.open(new File(db));  

        // 2. query  
        Query q = new QueryParser(Version.LUCENE_CURRENT,"contents",analyzer).parse(querystr);  

        // 3. search  
        int hitsPerPage = 10;  
        IndexSearcher searcher = new IndexSearcher(index,true);  
        IndexReader reader = IndexReader.open(index,true);  
        searcher.setDefaultFieldSortScoring(true,false);  
        TopscoreDocCollector collector = TopscoreDocCollector.create(hitsPerPage,true);  
        searcher.search(q,collector);  
        scoreDoc[] hits = collector.topDocs().scoreDocs;  

        // 4. display term positions,and term indexes   
        System.out.println("Found " + hits.length + " hits.");  
        for(int i=0;i<hits.length;++i) {  

            int docId = hits[i].doc;  
            TermFreqVector tfvector = reader.getTermFreqVector(docId,"contents");  
            TermPositionVector tpvector = (TermPositionVector)tfvector;  
            // this part works only if there is one term in the query string,// otherwise you will have to iterate this section over the query terms.  
            int termidx = tfvector.indexOf(querystr);  
            int[] termposx = tpvector.getTermPositions(termidx);  
            TermVectorOffsetInfo[] tvoffsetinfo = tpvector.getoffsets(termidx);  

            for (int j=0;j<termposx.length;j++) {  
                System.out.println("termpos : "+termposx[j]);  
            }  
            for (int j=0;j<tvoffsetinfo.length;j++) {  
                int offsetStart = tvoffsetinfo[j].getStartOffset();  
                int offsetEnd = tvoffsetinfo[j].getEndOffset();  
                System.out.println("offsets : "+offsetStart+" "+offsetEnd);  
            }  

            // print some info about where the hit was found...  
            Document d = searcher.doc(docId);  
            System.out.println((i + 1) + ". " + d.get("path"));  
        }  

        // searcher can only be closed when there  
        // is no need to access the documents any more.   
        searcher.close();  
    }      
}

java – 从Lucene中找到搜索命中的位置的更多相关文章

  1. 零基础从头学习Swift一:Swift环境搭建

    据我初步的了解,苹果的相关开发使用的IDE都是Xcode这个软件,我们通过AppStore下载相关的Xcode软件,我使用的是8.1这个版本。为了以后学习的方便,先创建一个工作空间,打开Xcode软件,如下图我们通过File--New--Workspace创建一个工作空间,命名为swift,路径选择自己的文件夹。点击Next这里项目名喔命名为Swift001,语言选择Swift。我们从左侧目录找到main.swift文件,这里又两行代码:我们点击左上角的运行按钮一个简单的环境就这样完成了,学习还在继续。。

  2. 零基础从头学习Swift二:Swift中的变量和常量

    今天Swift学习继续,这里主要介绍下Swift中的变量和常量,自己对Swift的初步了解,感觉Swift对数据类型的定义有点像JS,都是弱类型的,都是通过var来定义一个变量。Swift中的变量Swift中通过var这个关键字来定义变量,比如以下代码:这里都没有指定变量具体的数据类型,都是自动来做的,如果我们想手动指定变量的具体类型的话,可以通过如下方式:不过看一些资料说不建议这样写,自己也不是太明白。

  3. Lucene在Android中

    我是android和Lucene的新手.我可以在Android列表视图中使用Lucene进行搜索.我已经尝试导入包2.3.2并且还使用了库中的jar文件.但是,SearchFiles.java中存在错误错误是:无法解析java.rmi.Remote类型.它是从.class文件间接引用的.这个文件有可能不存在于android.这是问题吗?解决方法您可能希望在SQLite中使用名为FTS3的本机FullTextSearch功能,该功能在Android中可用,并且速度更快并且使用的内存比DalvikVM下的Ja

  4. Springboot通过lucene实现全文检索详解流程

    Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目,也是目前最为流行的基于 Java 开源全文检索工具包

  5. java Lucene 中自定义排序的实现

    使用Lucene来搜索内容,搜索结果的显示顺序当然是比较重要的.Lucene中Build-in的几个排序定义在大多数情况下是不适合我们使用的.要适合自己的应用程序的场景,就只能自定义排序功能,本节我们就来看看在Lucene中如何实现自定义排序功能.

  6. zend-framework – lucene文本搜索的无效字符

    在我的IndexController上我有我收到了错误和变量包含从维基百科复制的文本数组,我收到错误的字符–(不是–)和我得到错误(我相信).我在Luceneforeigncharsproblem得到了类似的相关问题,但没有解释在哪里做什么.如果我知道该做什么以及一点点解释,我将不胜感激最新通报::的iconv尝试将此添加到您的引导程序:

  7. php – Zend Lucene和Java Lucene之间的性能比较

    ZendLucene和JavaLucene分别用PHP和java构建,而PHP语言比java更高.只是想知道这两者在索引构建和数据搜索方面的性能差异有多大?让java创建和重建索引更有效,让PHP使用索引吗?

  8. zend-framework2 – Zend Framework 2搜索Lucene?

    ZF1有一个gread搜索lucene实现.ZF2有类似的东西吗?

  9. CentOs7.3 搭建 Solr单机服务

    CentOs7.3搭建Solr单机服务Solr是什么?Solr是一款优秀的基于Lucene的全文检索服务器,它对Lucene进行了扩展,提供了非常丰富的查询语言,并对查询进行了性能优化。Solr和Lucene都由ApacheSoftwareFoundation管理。检查您的端口号,然后重试。

  10. php – 在solr / lucene中过滤存储在远程数据库中的字段的最佳方法?

    就像编写直接连接数据库的solr模块一样?如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部