在使用solr的时候,在管理页面的analysis中可以发现有对词的分析的展示,在solrj中同样提供了方法获得,记个笔记,方便以后再用的着。
使用solrj获得分词结果要使用FieldAnalysisRequest类。
solrj提供的接口的逻辑和管理页面的逻辑一样,先是区分建立索引和查询两种情况(比如ik的使用时就是在建立索引的时候不适用智能分词,而在查询时启用智能分词),每种情况的分词时再区分是哪个域(fieldName)或者是域的类型(filedTypes)。对于第一个体现在FieldAnalysisRequest的fieldValue和query上,如果是建立索引时的分词就使用fieldValue,否则使用query(我已经做过测试),不过比较尴尬的是solrj不支持仅仅对query的设定,即如果不设置fieldValue的话就会空指针的异常,我猜测他这个功能并不是完全模仿管理页面的分词,因为在返回的结果中他还提供了match的功能,也就是将query的和fieldValue的分词是否match体现出来,所以他不允许fieldValue为null也就可以仅仅理解为他的局限性了。对于第二个的体现是fieldNames和fieldTypes的设置上,即设置多个要匹配的分词的域的名字或者是类型,以此得到分词器,注意这里无论是name还是type都是可以设置多个的,然后再获得结果的时候指定要获得域的名字或者类型的名字。
要获得分词的结果需要使用solrServer,调用FieldAnalysisRequest.process(solrServer)方法,获得一个FieldAnalysisResponse——也就是分词的结果。在这里面结果体现在两个map中,一个是fieldName的,一个是fieldType的,可以通过调用getFieldTypeAnalysis(String type)或者getFieldNameAnalysis(String name)获得对于某一个域的分词器的处理结果,处理结果用Analysis封装。在Analysis中,同样存在建立索引时和查询时的结果,也就是对应于fieldValue和query的分词结果,这样就和上面的分析对应起来了。最终的分词结果是AnalysisPhase,对于建立索引的结果还是查询时的,都是有多个AnalysisPhase,而且一个AnalysisPhase中还有多个TokenInfo,这个我有点吃不透,为啥不是直接一个List<Token>呢?尽管在AnalysisPhase中添加了分词器的类名,但是还是搞不懂为啥要分两层。
最后上代码
public static void main(String[] args) throws SolrServerException, IOException { // 链接solrCloud CloudSolrServer server = new CloudSolrServer("10.6.8.96:2181/shard_test"); server.setZkClientTimeout(1000*60); server.setDefaultCollection("article"); FieldAnalysisRequest request = new FieldAnalysisRequest(); request.setFieldNames(java.util.Collections.singletonList("title"));//这里可以设置多个fieldName,或者是fieldType,但是我们这里只是一个,用来作为例子 request.setFieldValue("我来自中国山东 我们那里有很多好吃的");//设置建立索引时的分词的内容 request.setQuery("我来自中国山东 我们那里有很多好吃的");//设置查询时的分词的内容 FieldAnalysisResponse response = request.process(server); Analysis sis = response.getFieldNameAnalysis("title");//指定要获得的域的名字,因为上面是setFieldNames,所以这里是getFieldNameAnalysis,如果上面是setFieldTypes,则这里就要调用getFieldTypeAnalysis // 获得fieldValue的分词结果 Iterator<AnalysisPhase> result = sis.getIndexPhases().iterator(); while(result.hasNext()){ AnalysisPhase pharse = result.next(); List<TokenInfo> list = pharse.getTokens(); for (TokenInfo info : list) { System.out.println(info.getText());//info还有很多的属性,这里没有设置 } } // 获得query的 result = sis.getQueryPhases().iterator(); while(result.hasNext()){ AnalysisPhase pharse = result.next(); List<TokenInfo> list = pharse.getTokens(); for (TokenInfo info : list) { System.out.println(info.getText()); } } }
相关推荐
在Solr中,分词器(Tokenizer)是文本分析的重要组成部分,它负责将输入的原始文本拆分成可搜索的独立单元——词语。IK分词器(Intelligent Chinese Analyzer for Solr,简称IK)是一款针对中文的高效分词工具,专为...
总之,选择合适的中文分词器并对其进行有效配置,对于提升Solr的中文搜索效果至关重要。同时,关注Solr的版本更新和最佳实践,有助于保持系统的稳定性和性能。在实际应用中,应结合业务需求不断调整优化,以达到理想...
例如,精确模式适合于对搜索结果的精确度要求较高的情况,而全模式则能获取更多的分词结果,适用于关键词抽取或文档相似度计算。 在Linux环境下,将IK Analyzer集成到Solr中通常涉及以下步骤: 1. **下载与安装**...
"solr中文分词高版本"的标题表明我们在这里讨论的是适用于Solr 6.5及以上版本的中文分词解决方案,因为默认的Solr分词器可能不支持这些较高版本,或者在使用过程中会出现问题。 描述中提到的“网上提供的solr中文...
本教程将详细解释如何在Solr中安装和使用IK分词器。 首先,让我们理解一下什么是分词器。在文本检索和自然语言处理领域,分词是将连续的文本分解成有意义的词语单元(如单词或短语)的过程。对于中文,由于没有明显...
3. 在Solr的配置文件中,如`solrconfig.xml`,确保分词相关的过滤器和分析器已经正确配置。 4. 重启Solr服务,使配置生效。 5. 创建或者更新Solr的索引,让新的分词器对文本进行处理。 通过以上步骤,你就可以在...
文件列表中的"ik-analyzer-7.5.0.jar"即是我们需要集成到Solr中的核心组件。 总之,Ik Analyzer 7.5.0是Solr处理中文文本的得力工具,通过合理的配置和使用,可以提升Solr在中文搜索中的性能和准确性。
6. 在Solr的管理界面中,可以使用分析器工具测试分词效果。 配置完成后,Solr5就能正确地对中文内容进行分词,从而提高搜索的准确性和效率。注意,分词器的选择和配置可以根据实际需求调整,比如选择其他版本的IK ...
在Solr6.0版本中,IK分词器的使用对于提升搜索准确性和效率至关重要。下面我们将深入探讨如何在Solr6.0中集成并使用IK分词器。 **IK分词器简介** IK分词器由Java编写,旨在提高对中文文本的分词效果。它支持多种...
Solr分词器是Apache Solr搜索引擎中的一个重要组件,它负责对输入的文本进行分词处理,以便于索引和查询。在理解Solr分词器之前,我们首先要明白Solr是一个开源的企业级搜索平台,它提供了高效、可扩展的全文检索、...
在 Solr 环境中,ikanalyzer 的作用是为中文文档提供精确的分词服务,从而提升搜索质量和效率。Solr8.4.0 是 Apache Solr 的一个版本,这是一个高度可配置、高性能的全文搜索和分析引擎,广泛用于构建企业级搜索应用...
标题中的"solr(ik分词器)需要的jar包"指的是为了在Solr中使用IK分词器,我们需要下载并添加相应的Java Archive (JAR) 文件到Solr的类路径中。这些JAR文件包含了IK分词器的实现和相关配置,使得Solr能够理解并处理...
- 使用 Solr 的 Admin UI 或 API 进行测试,查看分词结果是否符合预期。 - 根据实际需求调整 IK 分词器的配置参数,如启用/禁用某些过滤器,设置自定义词汇表等。 **IK 分词器的特性** - 支持动态加载自定义扩展...
可以通过分析器预览分词结果。 - 根据实际需求调整IK Analyzer的配置,比如自定义词典、停用词等。 6. **监控和维护** - 对Solr的查询性能进行监控,观察分词效果和索引构建速度,根据实际情况进行调优。 集成IK...
Solr分词器是搜索引擎Apache Solr中的一个重要组件,它负责对输入的文本进行分析,将其拆分成可索引的基本单元——词语。"k-analyzer-solr" 是一个特定的分词器实现,用于优化Solr的文本处理流程。在Solr中,分词器...
4. **测试分词效果**: 可以通过Solr的Admin UI中的Analysis页面,输入中文文本测试分词结果,确认IK分词器已经正确配置并工作。 除了基本配置,还可以通过自定义扩展词典来提高分词的准确性。IK分词器支持动态加载...
**JAVA+Solr分词项目工程实例** 在Java开发中,搜索引擎和文本处理是一个重要的领域,而Apache Solr是其中一个非常流行的开源全文搜索平台。这个项目工程实例是关于如何使用Java与Solr进行集成,实现分词搜索功能的...
1. **下载与配置**:首先,从官方网站或者GitHub仓库获取最新的IK分词器版本,解压后将`ik-analyzer-solr5.x.jar`添加到Solr的`lib`目录下,确保Solr启动时能加载到该分词器。 2. **配置Schema.xml**:然后,我们...
在Solr中集成IK分词器,可以提升对中文文本的处理能力,实现更精确的搜索结果。 首先,我们需要下载Solr的安装包,这个安装包通常包含Solr服务器的运行环境以及配置文件。解压后,你会看到一个名为`server`的目录,...