`
m2000hsf
  • 浏览: 99690 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Lucene 分词解读(二)--Analyzer

 
阅读更多
Lucene中的Analyzer

为了更好地搜索中文,在Lucene中通过WhitespaceTokenizer、WordDelimiter Filter、LowercaseFilter处理英文字符串。

Lucene中的StandardAnalyzer对于中文采用了单字切分的方式,这样的结果是单字匹配,如搜索"上海",可能会返回和"海上"有关的结果。

CJKAnalyzer采用了二元覆盖的方式实现。小规模搜索网站可以采用二元覆盖的方法,这样可以解决单字搜索"上海"和"海上"混淆的问题。采用中文分词的方法适用于中大规模的搜索引擎。猎兔搜索提供了一个基于Lucene接口的Java版中文分词系统。

可以对不同的索引列使用不同的Analyzer来切分。例如可以对公司名采用CompanyAnalyzer来分析;对地址列采用AddressAnalyzer来分析。这样可以通过更细分化的切分方式来实现更准确合适的切分效果。

例如把"唐山聚源食品有限公司"拆分成如表4-1所示的结果。

表4-1  公司名拆分结果表
词    开始位置    结束位置    标注类型
唐山  0  2  City
聚源  2  4  KeyWord
食品  4  6  Feature
有限公司   6  10  Function

这里的开始位置和结束位置是指词在文本中的位置信息,也叫做偏移量。例如"唐山"这个词在"唐山聚源食品有限公司"中的位置是0-2。OffsetAttribute属性保存了词的位置信息;TypeAttribute属性保存了词的类型信息。

专门用来处理公司名的CompanyAnalyzer实现代码如下所示:
   
引用
public class CompanyAnalyzer extends  
       Analyzer {  
        public TokenStream tokenStream  
           (String fieldName, Reader reader) { 
            //调用ComTokenizer切分公司名 
            TokenStream stream = new          
    ComTokenizer(reader); 
            //调用ComFilter后续加工 
            stream = new ComFilter          (stream); 
            return stream; 
        } 
    } 


对不同的数据写了不同用途的分析器,需要在同一个索引中针对不同的索引列使用。一般情况下只使用一个分析器。为了对不同的索引列使用不同的分析器,可以使用PerFieldAnalyzerWrapper。在PerFieldAnalyzerWrapper中,可以指定一个默认的分析器,也可以通过addAnalyzer方法对不同的列使用不同的分析器,例如:
  
引用
PerFieldAnalyzerWrapper aWrapper = 
          new PerFieldAnalyzerWrapper(new CnAnalyzer()); 
       aWrapper.addAnalyzer("address", new AddAnalyzer()); 
       aWrapper.addAnalyzer("companyName",
    new CompanyAnalyzer()); 


在这个例子中,将对所有的列使用CnAnalyzer,除了地址列使用AddAnalyzer且公司名称列使用CompanyAnalyzer。像其他分析器一样,PerFieldAnalyzerWrapper可以在索引或者查询解析阶段使用。
0
1
分享到:
评论

相关推荐

    Lucene源码解读1

    【Lucene源码解读1】 Lucene是一款开源的全文搜索引擎库,由Apache软件基金会开发,广泛应用于各种信息检索系统。其强大的搜索功能和高效的性能深受开发者喜爱。在深入理解Lucene之前,我们需要先了解它的核心概念...

    Lucene搜索-引擎开发权威经典pdf+源码第二部分

    这部分可能涉及一些关键类的源码解读,如Analyzer、IndexWriter、QueryParser等。 10. **实战案例**:书中可能包含了一些实际项目中的例子,展示如何将Lucene集成到Web应用或其他系统中,以及解决实际问题的经验...

    Lucene In Action ch 5 笔记 --高级搜索技术

    最后,可能还提到了自定义索引和查询策略,比如倒排索引的优化、定制化Analyzer、分词策略以及自定义Query和Filter的实现,这些都是为了适应特定领域或应用场景的需求。 通过以上分析,我们可以看出,《Lucene In ...

    Lucene介绍+源码解读+功能分析

    ### Lucene介绍与源码解读 #### 一、Lucene概述 Lucene是一个开放源代码的全文检索引擎工具包,由Doug Cutting所创立,并于2002年捐赠给了Apache基金会。Lucene并非一个完整的搜索引擎解决方案,而是一个提供全文...

    lucene4.4使用手册.docx

    《Lucene 4.4 使用手册》详细解读 Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发。它提供了高效的全文检索功能,适用于各种应用场景,包括站内搜索、论坛、博客文章、商品搜索等。全文检索的核心在于...

    lucene高亮显示

    `Analyzer`是Lucene中的核心组件之一,负责将文本分词并转换为TokenStream,用于索引和搜索。 2. **创建IndexSearcher:** `IndexSearcher`用于执行搜索操作。在构造函数中,通过`IndexReader.open()`打开指定目录...

    lucene基础学习笔记&源码

    **二、Lucene 的核心组件** 1. **文档(Document)**:文档是 Lucene 中的基本信息单元,可以包含多个字段(Field),如标题、内容等。每个字段都有其特定的属性,如是否可搜索、是否存储原始值等。 2. **字段...

    Lucene 例子

    例如,在 LuceneDemo1 中,我们可能会看到一个定制的 Analyzer 类,用于处理特定语言或领域的文本。 **2. 索引构建:** Lucene 使用倒排索引(Inverted Index)结构,这是一种优化的搜索数据结构。在这个过程中,每...

    lucene in Action 中文版

    《Lucene in Action》中文版是关于Apache Lucene搜索引擎库的详细解读,它涵盖了Lucene的基本概念、核心功能以及实际应用。这本书的前四章深入浅出地介绍了Lucene的关键知识点,对于想要学习和理解Lucene的人来说是...

    luke3.5源码

    3. `AnalyzerPanel`:这个类处理用户输入的文本,通过Lucene的`Analyzer`进行分析,并展示分词结果。源码中,它实现了文本输入、分词器选择和分词结果显示的功能。 四、源码学习的价值 通过对Luke 3.5源码的学习,...

    elasticsearch.zip

    常见的分词器有标准分词器(Standard Analyzer)、中文分词器(Smart Chinese Analyzer)等。安装分词器通常涉及下载对应的插件,然后使用Elasticsearch的`bin/elasticsearch-plugin`命令进行安装。 例如,安装IK...

Global site tag (gtag.js) - Google Analytics