首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

FieldCache在lucene中运用的代码解析,使用场景个人分析

2012-11-19 
FieldCache在lucene中使用的代码解析,使用场景个人分析这篇文章的由来是在寻求lucene的搜索的性能提高的过

FieldCache在lucene中使用的代码解析,使用场景个人分析
这篇文章的由来是在寻求lucene的搜索的性能提高的过程中成形的,
感谢所有所以给于我帮助的朋友,在baseworld的提示下,我仔细翻阅了代码,
于是想把自己的一些收获和想法写出来,希望对在学习的人提供帮助,
更希望有人不吝啬手中的砖头,指正我的想法



FieldCache为FieldCacheImpl的接口,
其中有个名为default类型为FieldCacheImpl的静态对象,


FieldCacheImpl中包含一些重要的不同类型的Cache属性,
例如:bytesCache,stringsCache。。。 
均继承于FieldCacheImpl.Cache抽象类,均实现抽象接口
protected abstract Object createValue(IndexReader reader, Object key)
        throws IOException;
例如:

 

 
public class DigitalFilter extends Filter {    static final String digitalRegex = "^\\d*\\.?\\d*$";    private Term t;    public DigitalFilter(Term t) {        this.t = t;    }    public BitSet bits(IndexReader reader) throws IOException {        BitSet bitSet = new BitSet(reader.maxDoc());        /* 在此处调用了cache的getFloats方法,ExtendedFieldCache只是扩展了FieldCache,增加了LongCache 和DoubleCache,其他一样 */         float digital[] = ExtendedFieldCache.DEFAULT.getFloats(                reader,                t.field(),                new FieldCache.FloatParser() {                    public float parseFloat(String string) {                        if (string.matches(digitalRegex))                            return Float.parseFloat(string);                        return 0;                    }                });        for (int i = 0; i < digital.length; i++) {            if (digital[i] == Float.parseFloat(t.text()))                bitSet.set(i);        }        return bitSet;    }    public static void main(String args[]) {    }}




解析就到这里了!代码整理是由baseworld的提点,导致了这些的产生,
在此感谢所有给我建议的人,感谢你们的帮助,
如果有人在fieldcache有不错的用法,请不吝啬手上的砖头,给点启发!
谢谢!
 




  






1 楼 yaozhan189 2008-12-01   对我帮助很大,慢慢研读~~~ 2 楼 moshalanye 2008-12-12     可能篇幅太长,好不容易整的啊,没什么人给意见,伤心下!希望有朋友能一起探讨下!:)   3 楼 yuxianghong 2008-12-15   很长时间没碰这个东西了.
有时间再过来看看. 4 楼 songzi0206 2009-10-21   不错的文章,不知道使用FieldCache对并发搜索性能提高有多大?希望lz不吝赐教 5 楼 moshalanye 2009-10-22       这个FieldCache 如果用在 filter上面 就让我感觉像 数据库的 index 的原理了,进行快速散列的效果,不过这个没有具体测试,这个适合用在分类字段上面。 6 楼 CapsLk 2009-11-05   看Mark Miller的Contrived FieldCache Load Test: Lucene 2.4 VS Lucene 2.9:
http://www.lucidimagination.com/blog/2009/09/22/contrived-fieldcache-load-test-lucene-2-4-vs-lucene-2-9

FieldCache的API:维护term的values的cache。我硬是没有看明白。
    String[] entrys = FieldCache.DEFAULT.getStrings(reader, "field")
返回的是field内容的第一个word的数组。
    int[] size = FieldCache.DEFAULT.getInts(reader, "field");
field的内容必须严格是int字符串,否则异常:java.lang.NumberFormatException。

跟着问一句:“如果有人在fieldcache有不错的用法,请不吝啬手上的砖头,给点启发! ”




7 楼 moshalanye 2009-11-05   建议 楼上的朋友再看下帖子和源代码!

FieldCache.DEFAULT 是使用默认实现,其中有多个api,使用的时候最好是针对那些不分词的字段使用,帖子里面有这样的原因说明

引用
int[] size = FieldCache.DEFAULT.getInts(reader, "field");
field的内容必须严格是int字符串,否则异常:java.lang.NumberFormatException。


你调用的是getInts 当然是int数组了,返回的东西是可以通过扩展进行自定义的。

再耐心的看看代码 你肯定会有收获  :〉


热点排行