`
sphway
  • 浏览: 6127 次
社区版块
存档分类
最新评论

redis-search4j

阅读更多
redis-search4j是一款基于redis的搜索组件

特点
1.基于redis,性能高效

2.实时更新索引

3.支持Suggest前缀、拼音查找(AutoComplete功能)

4.支持单个或多个分词搜索

5.可根据字段进行结果排序

环境
1.jdk 1.6+

2.redis 2.2+

依赖包
1.Jedis-2.1.0

2.commons-pool-1.6.jar

3.IKAnalyzer-3.2.8.jar

4.pinyin4j-2.5.0.jar,已内置,无需添加

原理:参考 huacn leeRails App 运用 Redis 构建高性能的实时搜索

示例片段

//使用内置的全局线程池,也可以自己实现jedis实例
JedisHolder holder=JedisHolder.singleton();        
JedisPool jp=holder.getJedisPoolInstance("localhost");        
Jedis jedis=jp.getResource();
 
//jedis.select(3);
//添加索引
IndexWriter iw=new IndexWriter(jedis);        
//addIdAndIndexItem(id,"切分后的字符串,中间以“|”分隔");        
iw.addIdAndIndexItem("1","Ruby|on|Rails|为什么|什么|如此|高效");        

//需要排序的item        
iw.addNeedSortItem("price","23.9");
iw.addNeedSortItem("date","2012");        
iw.addNeedSortItem("author","Klein");        
iw.writer();
                
iw=new IndexWriter(jedis);                
iw.addIdAndIndexItem("2","Ruby|编程|入门|应该|看|什么");        
iw.addNeedSortItem("price","12.9");        
iw.addNeedSortItem("date","2011");        
iw.addNeedSortItem("author","Kevin");        
iw.writer();
                
iw=new IndexWriter(jedis);                
iw.addIdAndIndexItem("3","Ruby|和|Python|什么|那个|更好");        
iw.addNeedSortItem("price","34.9");        
iw.addNeedSortItem("date","2009");        
iw.addNeedSortItem("author","Ben");        
iw.writer();

iw=new IndexWriter(jedis);                
iw.addIdAndIndexItem("4","做|Rubies|开发|应该|用|什么|开发|工具|比较好");        
iw.addNeedSortItem("price","24.9");        
iw.addNeedSortItem("date","2012");        
iw.addNeedSortItem("author","Good");        
iw.writer();
               

//搜索
IndexSearch is=new IndexSearch(jedis);        
System.out.println(is.search("Ruby","什么"));        
System.out.println(is.search("price", IndexSearch.DESC, "Ruby","什么"));        
jp.returnResource(jedis);//jedis放回pool中 
      

//输出结果:        [1, 2, 3]       [3, 1, 2]


AutoComplete功能

下载female-names.txt

添加
Suggest s=new Suggest(jedis);
//读取female-names.txt循环添加数据
s.write(word);


查找
SuggestSearch ss=new SuggestSearch(redis);
ss.search("be");


返回结果
[bea, beatrice, beatrisa, beatrix, beatriz, bebe, becca, becka, becki, beckie]
1
1
分享到:
评论
4 楼 kidshg 2017-09-15  
有没有详细的说明文档,不晓得怎么使用。
3 楼 java10000 2013-07-01  
这个组件在中文拼音搜索有问题,不知道你这边测试过没?
2 楼 sphway 2012-11-17  
cppmule 写道
这玩意和redis-search比谁更成熟?

这玩意是我参考别人的PPT写的java版本,目的是让我可以更了解redis, 如果说那个更成熟,我想是redis-search。现在redis-search4j源码已提供下载,如有不好的地方请多提意见
1 楼 cppmule 2012-11-17  
这玩意和redis-search比谁更成熟?

相关推荐

Global site tag (gtag.js) - Google Analytics