TermVector是Lucene 1.4新增的 它提供一种向量机制来进行模糊查询,TermVector保存Token.getPositionIncrement() 和Token.startOffset() 以及Token.endOffset() 信息.
Field.TermVector.NO:不保存term vectors
Field.TermVector.YES:保存term vectors
Field.TermVector.WITH_POSITIONS:保存term vectors.(保存值和token位置信息)
Field.TermVector.WITH_OFFSETS:保存term vectors.(保存值和Token的offset)
Field.TermVector.WITH_POSITIONS_OFFSETS:保存term vectors.(保存值和token位置信息和Token的offset)
下面是个简单的例子:
Analyzer analyzer = new StandardAnalyzer();
RAMDirectory directory = new RAMDirectory();
/**
* 创建索引
*
* @throws IOException
*/
public void index() throws IOException{
IndexWriter indexWriter = new IndexWriter(directory,analyzer,true);
Document doc1 = new Document();
doc1.add(new Field("title","java",Store.YES,Index.TOKENIZED));
doc1.add(new Field("author","callan",Store.YES,Index.TOKENIZED));
doc1.add(new Field("subject", "java一门编程语言",
Store.YES, Index.TOKENIZED,TermVector.WITH_POSITIONS_OFFSETS));
indexWriter.addDocument(doc1);
Document doc2 = new Document();
doc2.add(new Field("title","english",Store.YES,Index.TOKENIZED));
doc2.add(new Field("author","wcq",Store.YES,Index.TOKENIZED));
doc2.add(new Field("subject", "英语用的人很多",
Store.YES, Index.TOKENIZED,TermVector.WITH_POSITIONS_OFFSETS));
indexWriter.addDocument(doc2);
Document doc3 = new Document();
doc3.add(new Field("title","asp",Store.YES,Index.TOKENIZED));
doc3.add(new Field("author","ca",Store.YES,Index.TOKENIZED));
doc3.add(new Field("subject", "asp很多人用",
Store.YES, Index.TOKENIZED,TermVector.WITH_POSITIONS_OFFSETS));
indexWriter.addDocument(doc3);
indexWriter.optimize();
indexWriter.close();
}
// 进行搜索
public void searcher() throws IOException{
IndexSearcher searcher = new IndexSearcher(directory);
// 搜索书名为java的索引
TermQuery query = new TermQuery(new Term("title","java"));
Hits hits = searcher.search(query);
// 能找到一条记录
for(int i = 0; i < hits.length(); i++){
Document doc = hits.doc(i);
System.out.println("书名:" + doc.get("title") + " " + "作者:" + doc.get("author") + "简介:" + doc.get("subject"));
System.out.println("相关的书:");
docsLike(hits.id(i));
}
}
// 在subject中模糊搜索与doc相进的索引
public void docsLike(int id) throws IOException {
IndexReader reader = IndexReader.open(directory);
TermFreqVector vector = reader.getTermFreqVector(id, "subject");
BooleanQuery query = new BooleanQuery();
for (int j = 0; j < vector.size(); j++) {
TermQuery tq = new TermQuery(new Term("subject",
vector.getTerms()[j]));
query.add(tq, BooleanClause.Occur.SHOULD);
}
IndexSearcher searcher = new IndexSearcher(directory);
Hits hits = searcher.search(query);
printResult(hits);
}
// 显示结果
public void printResult(Hits hits) throws IOException{
for(int i = 0; i < hits.length(); i++){
Document d = hits.doc(i);
System.out.println("书名:" + d.get("title")+" " + "作者:" + d.get("author") +" " + "简介:" + d.get("subject"));
}
}
public static void main(String[] args) throws IOException {
TermFreqVectorTest3 test = new TermFreqVectorTest3();
test.index();
test.searcher();
}
搜索结果:
书名:java 作者:callan简介:java一门编程语言
相关的书:
书名:java 作者:callan 简介:java一门编程语言
书名:english 作者:wcq 简介:英语用的人很多
搜索书名为java 的索引,并且搜索与java的简介相关的索引.
将书<<java>>的subject分词为java/一/门/编/程/语/言/
在subject中搜索包含java/一/门/编/程/语/言/的索引
<<english>>包含语
分享到:
相关推荐
2. **搜索算法**:Lucene实现了布尔、短语、模糊、评分等高级搜索算法,使得用户可以灵活地构造复杂的查询条件。 3. **高性能**:Lucene通过内存缓存、位向量和优化的数据结构来提高搜索速度。同时,它支持多线程...
5. 默认实现了一套强大的查询引擎:Lucene的查询引擎默认实现了布尔操作、模糊查询(FuzzySearch)、分组查询等多种功能,用户无需编写代码即可获得强大的查询能力。 Lucene在搜索过程中,首先需要建立索引。索引...
1. 高性能:Lucene.NET使用内存映射文件(MMap)提高索引读取速度,并采用位向量技术进行快速匹配。 2. 支持多种查询类型:包括短语查询、布尔查询、范围查询、模糊查询等。 3. 多线程支持:允许多个线程同时读取...
例如,Lucene 1.4引入了排序、跨度查询和词项向量等新特性,而后续的版本则修复了一些性能问题并进行了优化。 Lucene的特点和优势显著,首先,它的索引文件格式是跨平台的,这意味着不同操作系统或应用可以共享同一...
5. **高级特性层** - 提供高级搜索功能,如模糊查询、近义词查询等。 #### 三、Lucene的索引文件格式 Lucene索引文件的格式是其高效性和可扩展性的关键所在,主要包括以下几种类型的文件: - **段元数据文件**...
例如,Lucene的查询处理不分大小写,对包含英文、数字或特殊字符的关键字进行分词,从而实现模糊查询。然而,如果需要精确查询,就需要调整分词策略。对于高亮显示结果时丢失标点的问题,可以通过选择合适的分析器,...
用户可以使用布尔查询、范围查询、模糊查询等复杂的查询表达式。Lucene通过JavaCC工具和QueryParser类来解析用户输入的查询语句,并将其转换为Lucene内部可以处理的查询对象。 分词器(Analyzer)是Lucene处理文本...
它实现了许多高级搜索技术,如布尔查询、短语查询、模糊查询以及复杂的评分机制,使得开发者可以快速构建功能强大的搜索应用。 2. DLL文件的作用 在Lucene.NET 2.9.4编译版中,最重要的文件就是包含的DLL(动态链接...
例如,可以使用ASP.NET MVC或Web API创建一个前端界面,用户通过该界面输入查询,后端则调用Lucene.Net进行搜索并返回结果。 总的来说,“Lucene.Net-2.9.2”版本提供了稳定、高效的全文检索功能,对于需要在.NET...
3. **搜索与排序**:用户输入查询后,Lucene会比较查询词与索引中的词,找出匹配的文档,并根据相关性进行排序。相关性通常是基于查询词在文档中出现的频率和位置计算的。 4. **过滤和高亮**:Lucene还支持对搜索...
Lucene还提供了丰富的查询语法,如布尔查询、短语查询和范围查询,以及模糊匹配、近似搜索等功能。在Java中,开发者可以通过Lucene的API创建索引,执行查询,优化性能,并处理复杂的检索需求。 除了基础功能,...
Lucene支持多种查询语法,如布尔查询、短语查询、模糊查询等。 4. **性能优化**:Lucene提供了多线程索引、块级检索等特性,以提升性能。同时,通过位向量和缓存等技术,能进一步提高搜索效率。 5. **扩展性**:...
4. **内存优化**:Lucene通过使用位向量和压缩技术来减少内存占用,提高检索速度。 5. **文档更新**:支持对已索引文档的更新和删除,保持索引的实时性。 6. **分片和分布式搜索**:在大型系统中,可以通过分片...
- **全文本搜索查询案例**:使用全文本搜索查询来进行自然语言搜索,如模糊匹配。 通过以上介绍,我们可以看到ElasticSearch 5.x不仅在技术上有了显著提升,而且在实际应用场景中也更加灵活和强大。对于那些希望...
4. **搜索算法**: Lucene支持多种搜索算法,如布尔搜索、短语搜索、模糊搜索等,可以根据需求灵活配置。通过这些算法,用户可以构造复杂的查询条件来获取相关结果。 5. **优化与性能**: 为了提高搜索效率,开发者还...
- **TermVector**:Lucene 1.4.3 版本新增的功能,提供一种向量机制进行模糊查询。 #### 三、Field 构造函数解析 - **构造函数示例**: ```java Field(String name, byte[] value, Field.Store store) Field...
了解Elasticsearch的高级查询特性是构建高效搜索应用的关键,包括掌握如何使用Query DSL来精确控制搜索过程,如何使用查询模板来简化复杂查询的编写,以及如何处理过滤器以优化查询性能等。作者在书中强调了过滤器在...
这通常涉及将Lire生成的图像特征存储到Lucene的文档中,然后使用Lucene的查询API来检索匹配的特征和元数据。 总结来说,Lire库提供了一种有效的方法来处理图像搜索任务,结合Lucene可以进一步提升搜索体验。通过...