有一百万条长度为17的数字字符串,如何快速的查找到是否有某条数字串?期望查找时间越短越好!有没有用过lucene的啊,使用这个能否做出来呀?

解决方案 »

  1.   

    存储在文件里,用lucene可以搜索出来的。
    就是做个索引,自己写索引也可以
      

  2.   

    UP!            
    UP!
      

  3.   

    现在这一百万条数字串就在我的txt文件中,用lucene的话,生成索引花了近两分钟
      

  4.   

    建立HashMap,将每个数字以key的形式存入,然后hashmap的get来查询,查询时间度为O(1)
      

  5.   

    发现一个问题。用lucene方法,生成的一百万数据(每条数据长度为18)中,任意找一个数字串作为关键字搜索却搜不到。而在生成一千条数据去查找却找得到,这是为什么呢?
      

  6.   

    原理:
    一级索引:
    1. 取得一个字符串(像字词里这个字符串是一个单词,有一个很长的解释)和他在文件中的位置构成一个key/value对X
    2. 把X按key顺序排序并存储到文件里
    3. 把X加载到内在里,然后进行二分查找二级索引:
    对一级索引再按上面的原理做生成一个索引:不是对每一个词了,例如按26个字母来或者头2个,头3个字母来做索引。
    这里的搜索是返回的是搜索包含这个索引的最小范围的一级索引里的索引数据
    然后再对上面加载进来的数据进行二分查找。
      

  7.   

    如果不考虑内存开销用hashset应该是最快的
      

  8.   

    内存受限了。只有一百多兆的内存,就是考虑到内存的原因,所以一开始没考虑使用hash*方法呀
      

  9.   

    我现在利用lucene在我的一百万数字串(长度为17,总共大小为17M)中查找是否有某条数字串,查找时间为45毫秒左右,期望时间是10毫秒以内,最好到达微秒级。请问有没有改进方法呀?
      

  10.   

    对Lucene不了解,应该有优化的方法
      

  11.   


    虽然用hash值做快速定位是个好主意,但是这里不能直接用hashmap,如果用hashmap的话,那速度太慢了。hashmap通过hash值定位之后,后面还是要遍历的。100万条数据量不算多,完全可以一次性放入内存,并且排序一下,然后使用二分查找的话效率应该还是很高的。当然这种算法是为了解决那种数据一次准备,然后可以很多次查询的那种。如果你只需要查找一次的话,还是直接遍历算了。
      

  12.   


    虽然用hash值做快速定位是个好主意,但是这里不能直接用hashmap,如果用hashmap的话,那速度太慢了。hashmap通过hash值定位之后,后面还是要遍历的。100万条数据量不算多,完全可以一次性放入内存,并且排序一下,然后使用二分查找的话效率应该还是很高的。当然这种算法是为了解决那种数据一次准备,然后可以很多次查询的那种。如果你只需要查找一次的话,还是直接遍历算了。我试过这样做。效率是不错。查询时间微秒级。但是因为内存受限了,只有一百多兆的内存,必须节省呢。100w条长度为17的数字串都占了17M了。
      

  13.   

    每个字符串都转换为一个long型存储放到一个数组里,排一下序,查找的时候二分查找。
    或者放到hashset里,速度更快。