在lucene使用过程中,如果要对同一IndexWriter中不同Document,不同Field中使用不同的analyzer,我们该如何实现呢?
通过对《lucene in action》的阅读,发现是可以解决这一问题的。lucene可以正对整个IndexWriter对象或者每一个document对象或者特定Field使用不同的分析器。
Analyzer analyzer = new StandardAnalyzer();
IndexWriter writer = new IndexWriter(direcotry, analyzer, true); //
Document doc = new Document();
doc.add(new Field("title", "this is title", Field.Store.COMPRESS,Field.Index.TOKENIZED,Field.TermVector.WITH_POSITIONS_OFFSETS));
doc.add(new Field("content", "this is content", Field.Store.COMPRESS,Field.Index.TOKENIZED,Field.TermVector.WITH_POSITIONS_OFFSETS));
writer.addDocument(doc); //这是大部分情况下使用的一个方法
其实还有另外一个方法,原型如下:
lucene自带文档 写道
addDocument(Document doc, Analyzer analyzer)
Adds a document to this index, using the provided analyzer instead of the value of getAnalyzer().
所以我们还可以写成这样:
writer.addDocument(doc, analyzer);
// 这里的analyzer是指另外一个你指定的analyzer,不同于上面的StandardAnalyzer
那么如何针对特定Field使用不同分析器呢,lucene包里面有个PerFieldAnalyzerWrapper类,解决了这一问题,这是lucene的文档里面的一段话:
lucene自带文档 写道
Example usage:
PerFieldAnalyzerWrapper aWrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer());
aWrapper.addAnalyzer("firstname", new KeywordAnalyzer());
aWrapper.addAnalyzer("lastname", new KeywordAnalyzer());
In this example, StandardAnalyzer will be used for all fields except "firstname" and "lastname", for which KeywordAnalyzer will be used.
A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing and query parsing.
PreFieldAnalyzerWrapper类的构造函数中需要一个默认的分析器作为参数。为了给不同的Field指定不同的analyzer,就需要调用该类的addAnalyzer()方法。上面的E文相信大家都能看懂的,就不需要我来翻译了,我的英语很差,着急啊,呵呵。
也就是说大家以前初始化分析器的时候用这一句:
Analyzer analyzer = new StandardAnalyzer();
现在可以改用
PerFieldAnalyzerWrapper analyzer = new PerFieldAnalyzerWrapper(new StandardAnalyzer());
然后如果需要特定域的分析器就调用addAnalyzer方法
analyzer.addAnalyzer("fieldname", new KeywordAnalyzer());
对了,最后说一下,PerFieldAnalyzerWrapper类也是在org.apache.lucene.analysis包下面的,只需要
import org.apache.lucene.analysis.PerFieldAnalyzerWrapper;
就行了
分享到:
相关推荐
在使用IKAnalyzer之前,需要将其配置到Lucene的分析器中,这样在建立索引时,输入的中文文本会被自动切分成关键词。IKAnalyzer支持自定义词典,可以根据实际需求扩展分词效果。 模糊查询是Lucene中的一个重要特性,...
以上就是关于“Lucene索引的简单使用”的详细介绍,包括其核心概念、创建和查询索引的步骤以及一些高级特性。希望对你理解和应用Lucene有所帮助。在实际开发中,可以根据需求选择合适的Analyzer,优化索引策略,以...
以下是一个简单的Java代码示例,展示了如何创建和使用Lucene索引器: ```java import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache....
本文将详细介绍如何使用Lucene 5.21版本结合IkAnalyzer 2012_V5进行文本分析和全文搜索的入门实践。 首先,让我们了解Lucene。Lucene是Apache软件基金会的一个开源项目,它是一个高性能、全文检索库,提供了强大的...
在使用IKAnalyzer与Lucene 4.3结合时,可能会遇到一些兼容性问题,主要是由于版本更新带来的API变化。例如,Lucene的某些类、方法或接口可能在新版本中被废弃或调整,导致旧版的IKAnalyzer无法直接运行。为了解决...
当将Lucene5与IKAnalyzer5结合使用时,可以实现对中文文档的高效检索。首先,需要将IKAnalyzer5的jar包导入到项目的lib目录下,确保其与Lucene5的版本相匹配,避免出现类冲突或运行异常。然后,在Lucene的索引创建...
- IKAnalyzer支持Lucene的高版本,意味着用户在使用新版本的Lucene时,可以无缝集成IKAnalyzer,从而实现高效的中文分词,提升搜索质量。 3. **Lucene 5.x、6.x、7.x的关键特性**: - Lucene 5.x引入了新的Doc...
3. **建立索引**:使用IndexWriter将Document添加到索引中,同时指定Analyzer。 4. **搜索**:通过IndexSearcher和Analyzer处理查询字符串,执行搜索并返回ScoreDoc数组。 5. **排序与展示**:根据ScoreDoc中的相关...
**Lucene索引结构原理** Lucene是Apache软件基金会的开放源代码全文搜索引擎库,它为Java开发人员提供了强大的文本搜索功能。理解Lucene的索引结构原理对于优化搜索性能和设计高效的搜索应用至关重要。 首先,我们...
《Lucene索引小示例解析》 Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护。在Java编程环境中,Lucene被广泛应用于构建搜索功能,特别是对于大量文本数据的高效检索。本篇文章将通过一个简单的小...
**Lucene索引的基本操作** Lucene是一款由Apache软件基金会开发的全文检索库,它提供了高效、可扩展的全文检索功能。在Java开发环境中,Lucene是广泛使用的文本搜索工具,能够帮助开发者构建复杂的搜索引擎。本文将...
4. **并行索引**:每个线程独立地读取分配的子目录中的文件,使用Analyzer处理文本,然后添加到相应的IndexWriter中。 5. **合并索引**:所有线程完成索引后,使用IndexWriter的`addIndexes()`方法将所有子索引合并...
这里提供了一个简单的例子,包括一个`DataFactory`类,用于模拟存储药品信息,以及一个`LuceneIKUtil`类,用于实现Lucene索引和搜索功能。`DataFactory`包含了一个`List<Medicine>`,每个`Medicine`对象包含了药品ID...
创建Lucene索引主要包括以下几个步骤: 1. **创建Analyzer**:Analyzer负责分词,即将输入的文本拆分成一个个有意义的词语。根据语言特性,可以选择不同的Analyzer,如StandardAnalyzer(默认)适用于英文,...
然后在创建索引和执行查询时使用这个Analyzer,这样可以确保中文文本被正确地分词处理。 总之,IK Analyzer 3.0 是一个强大而灵活的中文分词工具,它在处理中文文本方面表现出色,特别适合用于Lucene的全文检索系统...
在开发过程中,有时会遇到需要查看二进制索引文件内容的情况,这时可以使用工具如jd-gui.exe(Java反编译器),虽然它主要用于查看Java字节码,但在某些情况下也可以辅助理解Lucene索引文件的组成。然而,由于Lucene...
在实际应用中,开发者需要将 `\8878575_IKAnalyzer2012_V5.jar` 添加到项目的类路径中,然后按照 IKAnalyzer 提供的文档进行配置,就可以在 Lucene 中使用这个分词库进行中文文本的索引和搜索操作。同时,根据项目...
lucene-IKAnalyzer2012_u6-lukeall.rar压缩包中包含lucene-4.10.3依赖包、中文分词器IKAnalyzer2012_u6的依赖包和索引库查看工具lukeall-4.10.0.jar(将jar拷贝到相应的索引库中双击打开即可查看)。解压后就可以...
总结起来,Lucene索引数据分析器是开发人员的强大工具,它通过`IndexAPI.dll`提供的接口对文本进行高效索引,使用`IndexReader.exe`进行数据查询,最终以表格形式展示结果,便于开发者理解和利用数据。通过深入理解...