Lucene 自定义分词

learn_more 发布于 2015/05/13 17:12
阅读 250
收藏 0

    各位大神,帮菜鸟看个问题!

    使用Lucene3.5版本以及 IKAnalyzer 分词, 在对IP字段(192.168.2.240)分词时,结果为 : 192.168.2.240;其他表字段同样采用IKAnalyzer 分词;

    我的问题是:如何使192.168.2.240分词为 : 192 168 2 240 

    那么我查询的时候也可以使用这种分词进行模糊查询对应的IP了,另外,我使用过JKAnalyzer分词,虽然可以达到以上效果,但是我想在IKAnalyzer 的基础上进行(能否扩展IKAnalyzer,如何实现),希望得到各位的帮助,如果没有什么好建议,也可以推荐一些扩展的知识、博客、群、书籍、视频.......

    感激不尽!!

加载中
0
learn_more
learn_more

引用来自“himooc”的评论

你是要在创建索引时进行分词还是在搜索时,对搜索词进行分词?

比如,在搜索时,对输入的“192.168.2.240”进行分词,直接"192.168.2.240".split(".");这样就有4个词了,逐个搜索。

当创建索引时进行分词:

当doc在add的时候,对要添加的记录replace,把"."用 " "来替换。

面对上面的回答,我有以下疑问:

1)如果是创建的话,那存储进去的索引可以达到要求,但是存储的值则发生了变化;

2)如果是搜索的话,空格默认是关键词分隔,那么是或的意思,似乎查询的时候没有了顺序,比如192 2 240 168 也会匹配在前面 

0
cnDavidChen
cnDavidChen

你是要在创建索引时进行分词还是在搜索时,对搜索词进行分词?

比如,在搜索时,对输入的“192.168.2.240”进行分词,直接"192.168.2.240".split(".");这样就有4个词了,逐个搜索。

当创建索引时进行分词:

当doc在add的时候,对要添加的记录replace,把"."用 " "来替换。

0
cnDavidChen
cnDavidChen

引用来自“himooc”的评论

你是要在创建索引时进行分词还是在搜索时,对搜索词进行分词?

比如,在搜索时,对输入的“192.168.2.240”进行分词,直接"192.168.2.240".split(".");这样就有4个词了,逐个搜索。

当创建索引时进行分词:

当doc在add的时候,对要添加的记录replace,把"."用 " "来替换。

引用来自“learn_more”的评论

面对上面的回答,我有以下疑问:

1)如果是创建的话,那存储进去的索引可以达到要求,但是存储的值则发生了变化;

2)如果是搜索的话,空格默认是关键词分隔,那么是或的意思,似乎查询的时候没有了顺序,比如192 2 240 168 也会匹配在前面 

1、索引的值发生了变化,那这个不存储。单独弄个StringField用来保存这条记录。

即如下:

// 参与搜索并且不存储
     doc.add(new TextField("ip", "192.168.2.240".replaceAll(".", " " ), Field.Store.No));
     
     // 仅存储
     doc.add(new StringField("ipStore", "192.168.2.240", Field.Store.YES));



将来显示搜索结果的时候用ipStore字段。

2、没有了顺序有关系吗?

当输入“192.168.2.240”进行搜索时,上面被索引的记录中如果带有"192"或者"168"等等都能被搜索到的。

第二个的问题不是很理解= =

返回顶部
顶部