我的日常

登录/注册
您现在的位置:论坛 资料库 开源社区 > solr-4.10.0自定义逗号分词器
总共48087条微博

动态微博

查看: 4662|回复: 1

solr-4.10.0自定义逗号分词器

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2014-10-22 08:23:31 |只看该作者 |倒序浏览
    今天需要将一个以逗号分隔的字段建立到索引库中去,没找到有现成的逗号分隔符分词器,于是看了看源码里空格分词器WhitespaceTokenizerFactory的写法。照葫芦画瓢写了一个逗号分词器:
    但是版本太低 与现在版本所继承的类有所区别、故反编译了一下源码找到 WhitespaceTokenizerFactory类 在包lucene-analyzers-common-4.10.0.jar 下。
    CommaTokenizerFactory.java
    1. import java.io.Reader;
    2. import java.util.Map;
    3. import org.apache.lucene.analysis.util.TokenizerFactory;
    4. import org.apache.lucene.util.AttributeFactory;

    5. /**
    6. *@Function: 自定义逗号分词
    7. *@Class Name: CommaTokenizerFactory
    8. *@Author: zhangZhiPeng
    9. *@Date: 2014年10月21日
    10. *@Modifications:
    11. *@Modifier Name; Date; The Reason for Modifying
    12. *
    13. */
    14. public class CommaTokenizerFactory extends TokenizerFactory  {
    15.         public CommaTokenizerFactory(Map args)
    16.           {
    17.             super(args);
    18.             if (!(args.isEmpty()))
    19.               throw new IllegalArgumentException("Unknown parameters: " + args);
    20.           }

    21.           public CommaTokenizer create(AttributeFactory factory, Reader input)
    22.           {
    23.             if (this.luceneMatchVersion == null)
    24.               //return new WhitespaceTokenizer(factory, input);
    25.               return new CommaTokenizer(factory, input);
    26.               //return new WhitespaceTokenizer(this.luceneMatchVersion, factory, input);
    27.               return new CommaTokenizer(this.luceneMatchVersion, factory, input);
    28.           }

    29. }
    复制代码
    CommaTokenizer.java
    1. import java.io.Reader;
    2. import org.apache.lucene.analysis.util.CharTokenizer;
    3. import org.apache.lucene.util.AttributeFactory;
    4. import org.apache.lucene.util.Version;
    5. /**
    6. *@Function: 自定义逗号分词
    7. *@Class Name: CommaTokenizer
    8. *@Author: zhangZhiPeng
    9. *@Date: 2014年10月21日
    10. *@Modifications:
    11. *@Modifier Name; Date; The Reason for Modifying
    12. *
    13. */
    14. public class CommaTokenizer extends CharTokenizer{

    15.          public CommaTokenizer(Reader in)
    16.           {
    17.             super(in);
    18.           }

    19.           @Deprecated
    20.           public CommaTokenizer(Version matchVersion, Reader in)
    21.           {
    22.             super(matchVersion, in);
    23.           }

    24.           public CommaTokenizer(AttributeFactory factory, Reader in)
    25.           {
    26.             super(factory, in);
    27.           }

    28.           @Deprecated
    29.           public CommaTokenizer(Version matchVersion, AttributeFactory factory, Reader in)
    30.           {
    31.             super(matchVersion, factory, in);
    32.           }

    33.           protected boolean isTokenChar(int c)
    34.           {
    35.             //return (!(Character.isWhitespace(c)));
    36.              // 44表示逗号
    37.             return !(c == 44);
    38.           }
    39.          
    40. }
    复制代码

    判断是否等于44,如果等于就返回false,否则返回true。返回false表示分词。44是逗号的asc码值,比如a的asc码值为97,如果不知道一个字符对应的值为多少,可以这样:

    char[] c = new char[]{'a',',','b'};

    Character.codePointAt(c, 1);

    获得char数组里index为1的字符的asc码值。

    然后把写好的类打进  lucene-analyzers-common-4.10.0.jar

    schema.xml 里加入一下内容:
    1. <fieldType name="text_comma" class="solr.TextField" positionIncrementGap="100">
    2.       <analyzer>
    3.         <tokenizer class="org.apache.lucene.analysis.core.CommaTokenizerFactory"/>
    4.       </analyzer>
    5.     </fieldType>
    复制代码

    重启下 solr测试:




    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    本帖被以下淘专辑推荐:

    • · solr|主题: 8, 订阅: 0

    4

    主题

    0

    听众

    302

    金钱

    四袋长老

    该用户从未签到

    沙发
    发表于 2016-09-27 14:14:21 |只看该作者
    涨姿势了                                             
    回复

    使用道具 举报

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表