最近一直负责做lucene构建搜索引擎,其中采用的中文分词器就是qieqie提供的庖丁解牛分词器。由于发现当搜索:
1、关于番禺供电局增加乙类工作票签发人的请示
2、关于从化供电局2006年度“两票”考核奖励方案的报告
3、关于辖区内10KV架空线路两旁(线行下)受树木影响情况的报告
4、关于增城供电局防坠落装置安装和使用情况的报告
5、关于广州萝岗供电局2007年安措计划的报告
6、关于召开重要变电站事故应急预案编制讨论会的通知(9月9日上午9:30)
7、关于召开《广东电网继电保护通信通道运行管理办法》
当搜索整条句子时查不出结果,但是去掉红色部分再查找却可以查找到结果。
刚开始的分析:
从以上可总结出:
1、2、3、4、5:去掉的部分都是地名。
7:去掉的是特殊符号
6:还未找出具体问题,当查询“关于召开重要变电站事故应急预案编制讨论会的通知”还是一样查找不出结果。
本想去研究一下庖丁解牛分词的源码,可现在这两周接到做jbpm工作流的任务,所以一直拖着没去看。
可这个问题一直挂在心上,昨天突然想到那个配置文件:
<bean id="writerAnalyzer" class="com.net.paoding.analysis.analyzer.PaodingAnalyzer">
<property name="knife" ref="paoding"/>
<property name="mode" value="1"/>
</bean>
<bean id="queryAnalyzer" class="com.net.paoding.analysis.analyzer.PaodingAnalyzer">
<property name="knife" ref="paoding"/>
<property name="mode" value="2"/>
</bean>
<bean id="paoding" class="com.net.paoding.analysis.knife.PaodingMaker" factory-method="make"/>
写索引的时候采用writerMode(1)而查询的时候采用queryMode(2),会不会是这两次采用了不同的模式导致。
所以把上面查询的模式也改为writerMode即value="1".再查询发现可以查出上面的结果出来。看来还真是这个问题导致。
今早来上班又到网上查了下,原来qieqie早已提到了这个问题。
qieqie在javaeye上的帖子中的回复内容:
参见:
[url=http://analysis.group.iteye.com/group/post/15584 ]JavaEye:Spring Context下使用"庖丁解牛" [/url]
或:
Google:Spring Context下使用"庖丁解牛"
简单摘要(以上面两个链接中的说明为准,这里只是摘要):
Java代码
<bean id="writerAnalyzer" class="com.net.paoding.analysis.analyzer.PaodingAnalyzer">
<property name="knife" ref="paoding"/>
<property name="mode" value="1"/>
</bean>
<bean id="queryAnalyzer" class="com.net.paoding.analysis.analyzer.PaodingAnalyzer">
<property name="knife" ref="paoding"/>
<property name="mode" value="2"/>
</bean>
<bean id="paoding" class="com.net.paoding.analysis.knife.PaodingMaker" factory-method="make"/>
补:
1、建立索引和使用索引只能使用同一种/模式的分词器
2、2.0.2以后(包含)queryMode和writerMode这两个名称将重构为更好的名称,请留意倒是的API说明或readme变更说明。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/foamflower/archive/2009/04/30/4138595.aspx
分享到:
相关推荐
3. 索引(Index):索引是Lucene的核心,它将原始文本转化为一种可快速搜索的数据结构。通过分词器(Analyzer),将文本分解成单词(Token),然后构建倒排索引(Inverted Index),使得我们可以高效地查找包含特定...
总结来说,"lucene3.5 + ik中文分词器例子"是一个展示如何使用Lucene进行中文全文检索的示例,它涵盖了从数据抓取、分词处理、索引建立到查询执行的全过程。通过这个实例,开发者可以更好地理解和掌握Lucene与IK分词...
这些词项构成了倒排索引(Inverted Index),这是一种数据结构,它允许我们快速找到包含特定词项的所有文档。具体步骤包括: - 分词(Tokenization):通过分词器(Tokenizer)将文本切分成词项。 - 词项处理(Term...
本文将深入探讨如何利用Lucene实现增量索引,这是一种在数据库或文件系统更新时仅对新数据或变化数据进行索引的技术,以降低资源消耗并保持搜索性能。 **1. Lucene基础知识** Lucene首先需要理解的是它的核心概念,...
《使用Lucene.NET对数据库建立索引及搜索》 在信息技术领域,搜索引擎是不可或缺的一部分,尤其是在处理大量数据时。Lucene.NET是一个强大的全文搜索引擎库,它允许开发人员在应用程序中集成高级搜索功能。本文将...
Lucene,作为一种全文搜索的辅助工具,为我们进行条件搜索,无论是像Google,Baidu之类的搜索引 擎,还是论坛中的搜索功能,还是其它C/S架构的搜索,都带来了极大的便利和比较高的效率。本文主要是利用Lucene对MS Sql...
在这个场景中,我们将探讨如何利用Lucene来检索文本并建立索引,同时结合Struts框架构建一个Web程序。 首先,**Lucene** 是一个开源的Java库,它提供了完整的搜索功能,包括分词、索引创建、查询解析和结果排序。它...
在Lucene中,索引过程包括分词、建立倒排索引以及存储相关元数据。倒排索引是Lucene的核心,它允许快速定位包含特定词汇的文档。搜索则通过查询解析、评分以及结果排序来实现,提供高效的检索性能。 2.2.3 Web...
pinyinAnalyzer是Lucene的一个分析器,它利用了Pinyin4j的功能,能够将输入的中文文本分词并转化为拼音形式,以便于Lucene这样的全文搜索引擎进行索引和查询。而lucene-analyzers则是Lucene的一系列分析器集合,包含...
Lucene3.0分词系统的核心在于理解和应用其分词原理,无论是对于英文还是中文文本,这一过程都是构建高效搜索引擎的基础。以下是对Lucene3.0分词系统中涉及的关键知识点的深入解析。 ### 英文分词原理 英文分词相较...
- **文档模型**:在Lucene中,文档是以Field(字段)的形式存储的,每个Field可以有自己的Analyzer(分析器),用于对文本进行分词等预处理操作。 #### 三、Lucene并行索引技术 针对Lucene在处理大量数据时效率...
总结来说,`Lucene5`和`HanLP`的结合使用,为中文文本处理提供了一种强大且灵活的解决方案。通过自定义`Analyzer`,我们可以充分利用`HanLP`的优秀分词功能,增强`Lucene5`在中文环境下的搜索性能,从而满足复杂多样...
创建好`Document`后,将其添加到`IndexWriter`,这样Lucene就会为这些字段建立索引。 当索引构建完成后,我们就可以实现搜索功能了。首先,创建一个`DirectoryReader`来读取已经建立的索引,然后使用`IndexSearcher...
它提供了一种高效、可扩展的方式来存储和检索大量文本数据。而luke8,则是针对Lucene开发的一款可视化工具,允许开发者和管理员直接查看并分析Lucene索引库中的数据。 **1. lucene全解** Lucene的核心功能在于构建...
Lucene是Apache软件基金会的一个开源全文搜索引擎库,它提供了一种高效、可扩展的全文检索框架。作为一个纯Java库,Lucene可以被集成到任何Java应用中,帮助开发者轻松实现搜索功能。在深入理解Lucene之前,我们先来...
标准分词器(StandardAnalyzer)是Lucene提供的一种通用分析器,适用于大多数西文语言。它包含了一个标准分词器(StandardTokenizer)、一个标准过滤器(StandardFilter)以及一些其他过滤器,如字母数字转换过滤器...
【Lucene结合Sql建立索引】是将数据库中的数据通过Lucene这个全文搜索引擎进行索引,以便快速查询和检索的一种技术。在这个商业源码中,我们可能会看到如何使用Java编程语言来实现这样一个功能。Lucene是Apache软件...
Lucene 提供了索引和搜索文档的基本框架,包括分词、建立倒排索引、查询解析、结果排序等功能。 **安装与配置** 在使用 Lucene 之前,首先需要将其添加到项目依赖中。如果你使用的是 Maven,可以在 pom.xml 文件中...
MapReduce则是一种编程模型,用于处理和生成大规模数据集。 将Lucene索引写入Hadoop,一般涉及以下几个步骤: 1. **数据预处理**:首先,需要将原始数据进行预处理,如分词、去除停用词等,然后使用Lucene创建索引...
以创建content目录下的1.txt、2.txt和3.txt为例,我们需要为这三个文档的文件名、路径和内容建立索引。这里的关键角色是IndexWriter,它负责创建索引。我们通过调用IndexWriter的addDocument()方法,传入一个包含...