PrefixQuery类似于 数据库中的 like 'a%'查询
以下是测试代码,这种方式的缺陷是人为的分出了更多的term,目前还在找有没有更优的方法。
测试代码:
public static String index_path3="D:\\ix3";
public static void main(String[]args) throws Exception{
//createPrefixIndex();
//前缀查询
Query trquery = new PrefixQuery(new Term("pinyin","ghai" ));
IndexReader indexReader = IndexReader.open(FSDirectory.open(new File(index_path3)));
Searcher searcher = new IndexSearcher(indexReader);
TopDocs topDocs = searcher.search(trquery,100);
for (ScoreDoc hits:topDocs.scoreDocs){
Document doc = searcher.doc(hits.doc);
System.out.println("doc = "+doc.get("hotelName"));
}
}
/**
* 创建pinyin索引
*/
public static void createPrefixIndex(){
Analyzer analyzer = new IKAnalyzer();
PerFieldAnalyzerWrapper perFieldAnalyzerWrapper = new PerFieldAnalyzerWrapper(analyzer);
try {
//perFieldAnalyzerWrapper.addAnalyzer("price", new WhitespaceAnalyzer());
IndexWriter writer = new IndexWriter(FSDirectory.open(new File(index_path3)), perFieldAnalyzerWrapper, true,IndexWriter.MaxFieldLength.LIMITED);
Document doc = new Document();
String pinyin="shanghai";
int len = pinyin.length();
//将拼音截取保存
for(int i=0;i<len;i++){
String value = pinyin.substring(i,len);
doc.add(new Field("pinyin", value, Field.Store.YES, Field.Index.NOT_ANALYZED));
}
doc.add(new Field("hotelName", "test2", Field.Store.YES, Field.Index.ANALYZED));
writer.addDocument(doc);
doc = new Document();
doc.add(new Field("hotelName", "test3", Field.Store.YES, Field.Index.ANALYZED));
pinyin="beijing";
len = pinyin.length();
for(int i=0;i<len;i++){
String value = pinyin.substring(i,len);
doc.add(new Field("pinyin", value, Field.Store.YES, Field.Index.NOT_ANALYZED));
}
writer.addDocument(doc);
doc = new Document();
doc.add(new Field("hotelName", "test6", Field.Store.YES, Field.Index.ANALYZED));
pinyin="zhongguo_benxi";
len = pinyin.length();
for(int i=0;i<len;i++){
String value = pinyin.substring(i,len);
doc.add(new Field("pinyin", value, Field.Store.YES, Field.Index.NOT_ANALYZED));
}
writer.addDocument(doc);
doc = new Document();
doc.add(new Field("hotelName", "test1", Field.Store.YES, Field.Index.ANALYZED));
pinyin="tianjin";
len = pinyin.length();
for(int i=0;i<len;i++){
String value = pinyin.substring(i,len);
doc.add(new Field("pinyin", value, Field.Store.YES, Field.Index.NOT_ANALYZED));
}
writer.addDocument(doc);
writer.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
分享到:
相关推荐
首先,前缀搜索的核心在于`PrefixQuery`类,它是Lucene提供的一个查询类,用于执行以特定前缀开头的搜索。在`PrefixQueryDemo.java`文件中,我们可以看到如何创建和执行此类查询的示例代码。以下是一些关键步骤: 1...
《深入理解Lucene 6.6:拼音与IK中文分词技术详解》 在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用。在处理中文文本时,分词是至关重要的一步,它决定了搜索的精度和效果。本文将详细讲解如何在...
3. **查询处理**:在用户输入拼音查询时,也需要将拼音转换为汉字,并对每个拼音进行匹配。匹配过程中,不仅要考虑完全匹配,还要处理部分拼音、同音字等复杂情况。 4. **评分与排序**:为了提供准确的搜索结果,...
pinyinAnalyzer是Lucene的一个分析器,它利用了Pinyin4j的功能,能够将输入的中文文本分词并转化为拼音形式,以便于Lucene这样的全文搜索引擎进行索引和查询。而lucene-analyzers则是Lucene的一系列分析器集合,包含...
在使用Lucene进行信息检索时,理解和掌握其查询语法至关重要。本篇文章将深入探讨Lucene的查询语法,帮助你更好地进行数据查询与分析。 ### 1. 基本查询语法 Lucene的查询语法基于简单的字符串匹配,主要包含以下...
在这个"lucene与数据库连接进行查询"的主题中,我们主要探讨如何将 Lucene 与 JDBC(Java Database Connectivity)结合,通过数据库连接来获取数据并利用 Lucene 进行处理。 首先,我们需要了解如何使用 JDBC 连接...
这需要对Lucene的API有深入的理解,包括如何构建和执行查询,如何获取文档字段的原始文本,以及如何使用Highlighter。 在提供的链接博客文章中,作者可能会详细解释如何设置和使用这些功能,包括示例代码和步骤。...
Lucene支持多种查询类型,例如TermQuery、PrefixQuery、RangeQuery等。在时间区间搜索中,我们通常会用到RangeQuery。RangeQuery允许我们在指定的范围内查找匹配的文档,包括或者不包括边界。例如,我们可以创建一个...
在IT领域,Lucene是一个非常重要的全文搜索引擎库,它提供了高效、可扩展的搜索功能。在本主题中,我们将深入探讨如何使用...在实际应用中,还需要注意性能优化,如合理使用索引,以及根据业务场景选择合适的查询策略。
本文将深入探讨"Lucene5学习之分页查询"这一主题,结合给定的标签"源码"和"工具",我们将讨论如何在Lucene5中实现高效的分页查询,并探讨其背后的源码实现。 首先,理解分页查询的重要性是必要的。在大型数据集的...
本篇文章将详细阐述如何使用Lucene来创建和查询索引,帮助你深入理解其核心概念和操作流程。 ### 1. Lucene基本概念 - **文档(Document)**:在Lucene中,一个文档代表你要索引的信息单元,它可以包含多个字段...
在Eclipse环境中运用java,Lucene建索引及查询关键字
5. **查询语法**:Lucene支持布尔运算符(AND, OR, NOT)、短语查询、前缀查询、范围查询等多种查询类型。例如,"title:(+java -script)"表示查询标题中包含"java"但不包含"script"的文档。 6. **性能优化**:...
【Lucene3.0查询类型详解】 在Lucene3.0中,查询处理是一个关键环节,涉及多种查询方式和理论模型。以下是对这些概念的详细解释: 1. **查询方式**: - **顺序查询**:是最简单的查询方式,直接遍历索引,效率较...
在高级查询中,我们可能会利用FuzzyQuery进行模糊匹配,或者使用PrefixQuery进行前缀搜索,这些都能极大地提高用户查询的灵活性。 在智能查询中,更常见的功能是短语查询和近似查询。SpanQuery类族提供了一种精确...
根据不同的查询需求,`Query`有多个子类,如`TermQuery`、`BooleanQuery`和`PrefixQuery`等。这些子类用于将用户的查询字符串转化为Lucene可以理解和执行的结构。 接着,我们关注`Term`类,它是Lucene中表示搜索的...
根据需要,可以使用 `HitCollector` 或 `TopDocs` 来获取结果集。 总之,通过结合Apache Lucene、Apache POI 和 Apache PDFBox,我们可以实现对doc、docx、pdf、txt等格式文档的全文检索功能。这个过程涉及到文件...
**使用Lucene全文检索数据库** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发。它是Java编写的,能够帮助开发者在各种应用程序中实现强大的全文检索功能。在这个项目中,我们将探讨如何利用Lucene ...
因此,在实际应用中,需要根据性能需求合理设计查询表达式,并可能需要对索引进行优化,比如使用过滤器、预计算查询等技术。 ### 6. 结论 Lucene的表达式查询为开发人员提供了强大的工具,能够处理复杂的查询需求...
本文将深入探讨如何使用Lucene.NET进行全文搜索,特别是针对多关键字匹配的场景。 首先,我们需要了解Lucene.NET的基本概念。Lucene是一个开源的文本搜索库,它的核心功能包括文档索引、搜索和排序。Lucene.NET是这...