一、跨度域查询
基类是:SpanQuery
子类:SpantermQuery; //测试用的这个子类当然还有其他
二、测试
public class SpanTest { Directory dir; IndexWriter writer; IndexReader reader; IndexSearcher search; String[] ceshi; //初始化把索引存在内存中做测试 public void init() throws IOException{ dir=new RAMDirectory(); writer=writer(dir); ceshi=new String[]{"i like you","are you ok"}; } public IndexWriter writer(Directory dir) throws IOException{ Analyzer analyzer=new WhitespaceAnalyzer(Version.LUCENE_42); IndexWriterConfig config=new IndexWriterConfig(Version.LUCENE_42,analyzer); return new IndexWriter(dir, config); } public void createWrite() throws IOException{ for(int i=0;i<ceshi.length;i++){ Document doc=new Document(); doc.add(new TextField("contents",ceshi[i],Store.YES)); writer.addDocument(doc); } writer.close(); } public void test() throws IOException{ reader=DirectoryReader.open(dir); search=new IndexSearcher(reader); SpanTermQuery query=new SpanTermQuery(new Term("contents","you")); Map<Term,TermContext>m=new HashMap<Term,TermContext>(); TermContext termContext=TermContext.build(search.getTopReaderContext(),query.getTerm(),false); m.put(query.getTerm(), termContext); Bits bits = new Bits.MatchAllBits(0); Spans spans=query.getSpans(reader.getContext().leaves().get(0),bits, m); int num=0; System.out.println(query.getTerm()); while(spans.next()){ num++; int id=spans.doc(); Document d=reader.document(id); Analyzer analyzer=new WhitespaceAnalyzer(Version.LUCENE_42); TokenStream ts= analyzer.tokenStream("contents", new StringReader(d.get("contents"))); CharTermAttribute termAttribute = ts.addAttribute(CharTermAttribute.class); ts.reset(); //此行,不能少,不然会报 java.lang.ArrayIndexOutOfBoundsException StringBuffer buffer=new StringBuffer(""); buffer.append(""); int k=0; while(ts.incrementToken()){ if(k==spans.start()){ buffer.append("<"); } buffer.append(termAttribute.toString()); if(k+1==spans.end()){ buffer.append(">"); } buffer.append(" "); k++; } System.out.println(spans.start()+" "+spans.end()); System.out.println(buffer); //if(num==3)break; //break; } if(num==0){ System.out.println("no spans"); } } public static void main(String[] args) throws IOException { SpanTest s=new SpanTest(); s.init(); s.createWrite(); s.test(); } }
运行结果:
最后:
int k=0; while(ts.incrementToken()){ if(k==spans.start()){ buffer.append("<"); } buffer.append(termAttribute.toString()); if(k+1==spans.end()){ buffer.append(">"); } buffer.append(" "); k++; } 但是当用其他的分词器里面的匹配写法就出错了,因为其他分词器可能了一些会分词的时候会根据 需求去掉一些词,例如StopWords或者其他的一些词,而那个匹配是根据从0开始的,所以当用 其他的分词器这个地方不是一个真正的单词位置。
相关推荐
在IT领域,Lucene是一个非常重要的全文搜索引擎库,它由Apache软件基金会开发并维护。Lucene提供了高效的文本分析、索引和搜索功能,是许多大型网站和应用的基础。本话题聚焦于“Lucene多字段查询”和“文字高亮显示...
在Lucene3.0中,查询处理是一个关键环节,涉及多种查询方式和理论模型。以下是对这些概念的详细解释: 1. **查询方式**: - **顺序查询**:是最简单的查询方式,直接遍历索引,效率较低。 - **索引查询**:基于预...
在Lucene中,表达式查询是一种高级查询方式,允许用户通过特定的语法构造复杂的查询条件。本篇文章将深入探讨Lucene表达式处理查询的原理、语法及示例。 ### 1. Lucene表达式查询基础 Lucene表达式查询是基于...
**Lucene索引和查询** Lucene是Apache软件基金会的开放源码全文...本项目提供了一个基础的实现示例,对于初学者来说,是学习Lucene索引和查询的绝佳起点。在实际应用中,可以进一步扩展和优化,以满足更复杂的需求。
lucene 做索引查询流程,来自《lucene in action》
**Lucene查询语法详解** Apache Lucene是一款高性能、全文本搜索库,被广泛应用于各种搜索引擎的构建。在使用Lucene进行信息检索时,理解和掌握其查询语法至关重要。本篇文章将深入探讨Lucene的查询语法,帮助你更...
5. **评分(Scoring)**:Lucene会根据查询和文档的相关性给出一个分数,决定搜索结果的排序。TF-IDF(Term Frequency-Inverse Document Frequency)是最常用的评分算法。 现在,我们详细讲解如何在Lucene中进行...
在上面的代码中,`DateTools.DateToString`方法将DateTime对象转换为Lucene可理解的字符串格式,然后创建了一个包含这两个时间点的闭合范围查询。这里的“true”参数表示边界是包含的。 接下来,我们需要将这个...
Lucene是一个高性能、全文本搜索库,它被广泛应用于各种系统中以提供高效、精确的搜索功能。本篇文章将详细探讨如何在C#环境下利用Lucene实现快速搜索。 首先,让我们了解Lucene的基本概念。Lucene是一个开源的Java...
在Eclipse环境中运用java,Lucene建索引及查询关键字
在这个“lucene 公交路线查询系统”项目中,开发人员利用Lucene的技术为某市创建了一个公交路线查询平台,使得用户能够快速、方便地找到最优的公交出行方案。 首先,Lucene的核心功能是文本索引和搜索。在本项目中...
而我们可以将这两种方式结合下,每次查询都多缓存一部分的结果集,翻页的时候看看所查询的内容是不是在已经存在在缓存当中,如果已经存在了就直接拿出来,如果不存在,就进行查询后,从缓存中读出来. 比如:现在我们有一个...
**Lucene Facet查询详解** Lucene是一款强大的全文搜索引擎库,广泛应用于各种信息检索系统。在处理大量数据时,为了帮助用户快速、有效地探索和理解数据,Lucene引入了Facets(方面)功能,它提供了分类浏览和统计...
本文将深入探讨"Lucene5学习之分页查询"这一主题,结合给定的标签"源码"和"工具",我们将讨论如何在Lucene5中实现高效的分页查询,并探讨其背后的源码实现。 首先,理解分页查询的重要性是必要的。在大型数据集的...
Lucene是一款强大的全文搜索引擎库,由Apache软件基金会开发,它为企业构建高效、可扩展的搜索功能提供了强大的支持。在本文中,我们将深入探讨如何使用Lucene来实现一个类似当当网的企业产品检索系统,特别关注如何...
本篇将通过一个小案例,探讨Lucene在高级智能查询中的应用,尽管案例中可能存在一些小瑕疵,但主要的功能与思路已得以体现。 Lucene的核心在于其建立倒排索引的能力,这种索引结构使得快速匹配大量文档成为可能。...
Lucene 是一个高性能、全文本搜索库,常用于构建搜索引擎应用。它提供了高效的索引和查询功能,使得在大量文本数据中快速查找相关信息变得可能。而数据库,如 MySQL、PostgreSQL 或 Oracle,通常用于存储结构化的...
2. **查询分析器(Query Analyzer)**:这是Lucene中的一个核心组件,负责将用户的查询字符串转化为一系列的分词(Token),以便与索引中的分词进行匹配。默认的分析器会处理如停用词、词形还原等文本预处理工作。在...
Directory类代表一个Lucene索引的位置。它是一个抽象类. 其中的两个实现: 第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置。 第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。 ...