`

Lucene为不同字段指定不同分词器(转)

阅读更多
在lucene使用过程中,如果要对同一IndexWriter中不同 Document,不同Field中使用不同的analyzer,我们该如何实现呢?

通过对《lucene in action》的阅读,发现是可以解决这一问题的。lucene可以正对整个IndexWriter对象或者每一个document对象或者特定 Field使用不同的分析器。
Java代码 复制代码

    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().

所以我们还可以写成这样:
Java代码 复制代码

    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文相信大家都能看懂的,就不需要我来翻译了,我的英语很差,着急啊,呵呵。

也就是说大家以前初始化分析器的时候用这一句:
Java代码 复制代码

    Analyzer analyzer = new StandardAnalyzer(); 

现在可以改用
Java代码 复制代码

    PerFieldAnalyzerWrapper analyzer = new PerFieldAnalyzerWrapper(new StandardAnalyzer()); 

然 后如果需要特定域的分析器就调用addAnalyzer方法
Java代码 复制代码

    analyzer.addAnalyzer("fieldname", new KeywordAnalyzer()); 

对了,最后说一下,PerFieldAnalyzerWrapper类也是在org.apache.lucene.analysis包下面的,只需要
Java代码 复制代码

    import org.apache.lucene.analysis.PerFieldAnalyzerWrapper; 

就行了

转:http://hi.baidu.com/lewutian/blog/item/42bf84ceeef3ba35b600c8e7.html





搜索引擎和网络爬虫技术群293961767欢迎志同道合的朋友加入!
分享到:
评论

相关推荐

    lucene.NET 中文分词

    2. **配置分词器**:在Lucene.NET的索引创建阶段,需要配置Analyzer类,指定使用特定的分词器。例如,使用IK Analyzer可以创建`IKAnalyzer analyzer = new IKAnalyzer();`。 3. **字段分析**:在创建Document对象时...

    lucene.net+盘古分词多条件全文检索并匹配度排序

    lucene.net的版本为2.9.2 盘古分词的版本为2.3.1 并实现了高亮功能。高亮上使用的是盘古分词的高亮算法。 有点小bug,在这个字段没有关键字的时候可能会不显示数据, 如果要是只看全文检索,可以自己去掉高亮,看...

    Lucene-Demo.rar Lucene分词的demo

    分词器的配置是灵活的,可以根据需求选择不同的分词策略,比如标准分词器(StandardAnalyzer)适用于大多数英文文本,而中文分词可能需要使用IKAnalyzer或SmartChineseAnalyzer等针对中文特性的分词器。 在运行这个...

    如何使用Lucene的中文分词搜索

    这些分词器能识别中文词汇并将其拆分为单个词元(Token)。 2. **配置分析器**:在LuceneUtils.java或LuceneDB.java中,需要配置合适的中文分词分析器。例如,使用IK Analyzer,代码可能如下: ```java Analyzer ...

    Lucene与中文分词技术的研究及应用

    2. **配置Lucene**:在Lucene的配置文件中指定自定义的中文分词器。 3. **索引构建**:使用中文分词器构建索引。 4. **查询优化**:对查询语句进行预处理,提高搜索精度。 #### 应用实例 本论文中提到了基于Lucene...

    Lucene分词器资源包

    **Lucene分词器资源包详解** Lucene是一款开源的全文搜索引擎库,广泛应用于Java开发中,用于构建高效、可扩展的信息检索应用。这个压缩包提供了Lucene分词时所必需的jar包,使得开发者能够方便地在项目中集成...

    jieba结巴分词 支持lucene5

    jieba的lucene分析器(Analyzer)扩展了Lucene的分析能力,它将jieba的分词结果转换为Lucene可理解的文档字段,这样在建立索引和执行查询时,中文文本可以被正确处理。这在构建基于Lucene的中文搜索引擎或者信息检索...

    Lucene4.7+IK Analyzer中文分词入门教程

    在Lucene中,你可以通过创建`Analyzer`实例,然后使用`Document`对象来添加字段,如药品名称和功能主治,这些字段会被分词器处理。 在索引建立完成后,可以使用Lucene提供的搜索API来进行查询。这通常涉及到创建`...

    ik分词器2012和lucene的资源和jar包以及lucene索引查看工具

    IK分词器与Lucene是Java开发中两个重要的文本处理工具,主要应用于信息检索和自然语言处理领域。这里我们将深入探讨这两个组件以及相关的资源和工具。 1. **IK分词器**: IK分词器(Intelligent Chinese Analyzer ...

    Lucene.Net +盘古分词 搜索引擎

    **正文** Lucene.Net是一个基于Apache Lucene的全文检索库,专门为.NET Framework设计。...通过深入理解Lucene.Net的内部机制和盘古分词的工作原理,可以进一步优化搜索性能,满足不同场景的需求。

    盘古分词、lucene3.0.3搜索的使用示例v1.2

    盘古分词和Lucene是两个在中文信息处理领域广泛应用的工具,本示例将详细介绍如何在.NET 4.0环境中整合这两个组件,以实现高效的全文搜索功能,并新增了分页功能,为开发者提供了更便捷的开发体验。 首先,盘古分词...

    中文搜索分词lucene包+paoding包

    2. **索引构建**:将分词后的结果作为Lucene的文档字段,建立索引。每个文档可以看作是多个关键词的集合,这些关键词及其位置信息被存储在Lucene的索引结构中。 3. **查询处理**:当用户输入查询时,同样使用...

    Lucene.net 盘古分词C#

    Field是Document的组成部分,用于存储不同类型的字段,如日志时间、内容等。 4. **IndexWriter**:负责创建和更新索引,将Document添加到索引中。 5. **Searcher**:执行搜索操作,根据用户的查询返回匹配的文档。 6...

    ik分词器jar包.zip

    例如,可以为字段定义一个名为`analysis`的Analyzer,指定`class="org.wltea.analyzer.lucene.IKAnalyzer"`。 4. 如果需要自定义分词规则,可以编辑IK分词器的配置文件,如` IKAnalyzer.cfg.xml`,设置分词模式(如...

    es安装ik分词器

    在 Elasticsearch 中创建索引,并指定 IK 分词器作为索引字段的分词方式。示例命令如下: ```json PUT /my_index { "settings": { "analysis": { "analyzer": { "ik_analyzer": { "type": "ik", "use_smart":...

    lucene.net+盘古分词

    在这个过程中,Analyzer是连接分词器和索引构建的关键,它负责接收输入文本,进行分词,然后将结果转化为Lucene.NET可以理解的Token流。 在搜索阶段,用户输入的查询字符串同样会经过盘古分词的处理,生成查询...

    solr7.3.1中文分词器

    标题中的"solr7.3.1中文分词器"指的就是为Solr 7.3.1版本特别优化的中文分词解决方案。 描述中提到的"solr7.3.1种需要的中文IK分词器",IK(Intelligent Chinese Analyzer)分词器是一个强大的、成熟的中文分词组件...

    Lucene分词查询

    每个文档由多个字段(Field)组成,如标题、内容等,每个字段可以设置不同的属性,比如是否被索引、是否存储等。在添加文档时,需要使用Analyzer进行分词,这是处理中文文本的关键,因为中文不像英文那样自然分隔,...

    solr中文分词器

    4. 多字段分词:针对不同字段使用不同的分词策略,满足多样化需求。 总结来说,Solr中文分词器是实现高效中文搜索的关键,选择合适的分词器并进行合理配置,可以显著提升搜索质量和用户体验。开发者需要根据项目...

    solr ik分词器

    Solr是中国最流行的开源搜索引擎Lucene的一个扩展,...总之,"solr6.3 ik分词器"是一个强大的中文分词解决方案,通过定制化配置,它可以更好地满足不同领域的中文文本处理需求,提升Solr在处理中文内容时的性能和精度。

Global site tag (gtag.js) - Google Analytics