在solr4.x上使用IK分词设置useSmart没有效果的解决方案

2019-03-27 01:20|来源: 网路

大家知道由于lucene和solr在最新版本在分词方面改动比较大,在solr4.x上使用IK分词,并且设置粗细力度,安装官方的说法是这样设置的:

结果发现建索引和查询时候的分词力度是一样的,默认是安装细力度分词,解决方案如下:

package org.apache.solr.analysis;


import java.io.Reader;

import java.util.Map;


import org.apache.lucene.analysis.Tokenizer;

import org.apache.lucene.analysis.util.TokenizerFactory;

import org.apache.lucene.util.AttributeSource.AttributeFactory;

import org.wltea.analyzer.lucene.IKTokenizer;


/**

 * 解决IK Analyzer 2012FF_hf1 在solr4.x应用时,配置useSmart失效的问题

 * 

 * @author lqin

 * @date 2013-12-24

 * @email qin.liang@sinovatio.com

 * @version 1.0

 * 

 */

public class IKAnalyzerSolrTokenizerFactory extends TokenizerFactory {


/**

* 构造函数,从参数里面读取配置

* @param args

*/

public IKAnalyzerSolrTokenizerFactory(Map<String, String> args) 

{

super(args);

assureMatchVersion();

// 设置分词力度,useSmart=true粗力度,useSmart=false细力度

this.setUseSmart("true".equals(args.get("useSmart")));

}

private boolean useSmart;

public boolean useSmart() 

{

return useSmart;

}

public void setUseSmart(boolean useSmart) 

{

this.useSmart = useSmart;

}

public void init(Map<String, String> args) {

this.useSmart = "true".equals(args.get("useSmart")) ;

}

@Override

public Tokenizer create(AttributeFactory factory, Reader input) 

{

Tokenizer _IKTokenizer = new IKTokenizer(input , this.useSmart);

        return _IKTokenizer;

}


}


修改配置:



转自:http://my.oschina.net/u/137332/blog/188215

相关问答

更多
  • ik分词器简单容易控制啊,反正我个人觉得ik不错
  • 你直接把这两个文件ctrl c 然后鼠标点击项目 再ctrl v 相当于拷贝到项目根目录 反正我是这样弄的 可以用
  • 分词器的工作是将一串的文本切成 tokens,这些 token 一般是文本的子集。分析器的处理对象时一个字段,分词器则是面对一串文本,分词器读取一串文本,然后将其切割成一堆的 token 对象。 字符串中的空格或连接符会被删除。字符将被添加或者替换,如映射别名,或者缩写替换缩写为正常格式。分词器可能会产生出与原字段值不一致的token,或者长度与原始文本不一致。这个在token元数据用于文本字段高亮搜索结果时需要注意。 <fieldType name="text" class="solr.Te ...
  • 可以看下这个Solr安装部署,里边包括安装、部署、添加中文分词等等
  • 嗯,我将语音项目中的“平台工具集”从“Visual Studio 2015(v140)”切换到“Visual Studio 2015 - Windows XP(v140_xp)”(无论如何我都想要),现在它可以工作了。 我想这并没有解决任何有同样问题的人的问题,但在我的情况下它解决了问题。 Hmmm, I switched the "Platform Toolset" in the voice project from "Visual Studio 2015 (v140)" to "Visual Studi ...
  • 这个代码示例实际上并不是十一分之一。 如果你看到,它是交替的增加和减少每个数字,然后在最后检查结果是否可以被11整除。 例如,查看下面的数字以及该算法如何使用它: Start with sum=0, sign='+', num=517 First iteration: sum=7, sign='-', num=51 Second iteration: sum=6, sign='+', num=5 Final iteration: sum=11, sign='-', num=0 最终结果可以被11整除。 编 ...
  • 您可以使用主从复制。 只需将一台机器专用于索引(主solr),然后,如果它已完成,您可以告诉从机从主机复制索引。 从站将下载新索引,并且只有在下载成功时才会删除旧索引。 所以这很安全。 http://wiki.apache.org/solr/SolrReplication 避免所有这些复制设置的另一个解决方案是使用反向代理,将nginx或类似的东西放在solr前面。 使用一台机器索引新数据,另一台机器用于搜索。 你可以让反向代理始终指向当前没有进行任何索引的代理。 如果您执行其中一个,那么您可以根据需要随时 ...
  • 你需要3个表。 Table: Image Columns: ImageId, ItemID, Title Table: Image_Tag Columns: ImageId, TagId Table: Tag Columns: TagID, Name 然后获取您将使用的标签的所有图像: SELECT ImageId, Title FROM Image_Tag LEFT JOIN Image USING (ImageId) WHERE TagId = $TagId 这是处理关系数据库中多对多关系的典型方 ...