这样的需求是使用【lucene】还是使用 【数据库索引】

我有这样的一个需求:

一个数据库表格:(有很多个主要字段,其中内容固定,每个字段的长度都很短, 记录数10W+ 可能更多)

1.省份 | 2. 市 | 3. 街 | 4. 经度 | 5. 纬度 | ………………

目标:1)可以实现:( 省市街 )三个条件的 单独 或者 组合 模糊查找如找 纬度:120~~130 以内 经度 80~~100以内 的记录 :如: 单查: “某某街” ( 符合要求的全部列出)

                                                                                                          组合: "某"  (市)    "某"  (街)  或者  "某" (省)  "某"  (街)     ( 符合要求的全部列出)


    2)经度和纬度是类似于  (123.48,46.54 )的双精度类型的数据

        可以实现:通过给出一组 经纬度值,查出在其范围内的符合要求的记录 :



    3)很短时间完成

以上需求都要把满足条件的 所有的字段 取出来,有可能以后要扩展!

您的回答1:需要这样的一些要求,是用Lucene好?还是数据库索引好?哪个速度快?

您的回答2:我们BOOS叫我用数据库索引,但是我不是DBA。才毕业,我用lucene做了个测试500W+的数据查找需要400毫秒左右!这样的速度是不是太慢了? 【2.5G的CPU,1G内存,XP】

您的回答3:我们BOOS昨天给我说,他的目标是:(10W+的模糊查找)【1毫秒】内出结果!我才毕业。觉得【1毫秒】太快了,真的可以吗?(我们用的是 mysql5 数据库)

      请知道的前辈多说几句,我是一新人。在此先谢过了!

      马上过年了,希望过个开心年啊!!谢谢大家了!

[b]问题补充:[/b]
说老实话。。我也觉得1毫秒绝对不可能。可惜。。。
[b]问题补充:[/b]
问题是 用lucene快点还是 数据库索引快啊??
今天又把我留下来学习。,。
叫我去弄。
我本来就是搞java的。喊我自己写 索引规则。。
我会个屁啊
[b]问题补充:[/b]
听说:

如果我想找上海酒店,价格在300~500之间。用Lucene处理,它会在内部形成类似这样的查询项:

地点:上海酒店
价格:300

地点:上海酒店
价格:301

…………

地点:上海酒店
价格:500

总共要生成200个这样的查询项,这是倒排索引的机制所限定的。这还算好,如果客户来个100~10000,Lucene就直接挂掉了。

以上是在一个讨论中看到的。。
请问是吗?

如果在我的应用的经纬度的查询中,经纬度是 double的
我想办法把他转成int 在给lucene 索引,那样不是要生成 n万 个这样的查询项?

你通过RangeQuery来做范围查询的话....
RangeQuery是通过BooleanQuery来做的...
每个条件就会加一个BooleanQuery...
BooleanQuery默认最在的条件为1024个.
但是可以通过BooleanQuery.setMaxClauseCount(10000000);来调整...
但是扩大也是有限的,并且随着maxClauseCount扩大,占用内存也扩大

用RangeFilter代替RangeQuery,但是仍然有性能瓶颈,查询的90%以上时间耗费在 RangeFilter,研究其源码发现RangeFilter实际上是首先遍历所有索引,生成一个BitSet,标记每个document,在时间范围内的标记为true,不在的标记为false,然后将结果传递给Searcher查找,这是十分耗时的。

模糊查找,你在怎么建索引,数据库也是做全表扫描的...
如果用模糊查询的话,要是能在1MS内找出来的话,,你可以直接给你们BOSS一巴掌..不懂还装....
Lucene的话..1MS出来.估计也不可能..因为你需要的是一个范围的查询...
但是Lucene不管你是什么查询,它多会走他的索引...
10W数据的话,,应该在80MS左右...

10W条数据1MS内模糊查询出来..也就你们BOSS能想到...

肯定是lucene快呀....你直接把整个索引文件加载到内存..在查询