类似baidu搜索的sql怎么写的?

我要在数据库里查数据
规则是这样的:
我要输入“上海 徐汇”就能查出所有带“上海 徐汇”字样的数据(另外,条件不一定只有2个,比如“上海 徐汇 办事处”写可以查)
我现在是这样写的:
[code="java"]String keyword=keyword.trim().replace(" ", "%");
String sql="select * from 表名 where region like '%"+keyword+"%'";[/code]

这样输入“上海 徐汇 办事处”,就会输出语句如下:
[color=red]sql="select * from 表名 where region like '%上海%徐汇%办事处%';[/color]
现在有问题,假如我输入查询条件“办事处 徐汇 上海”,这样倒过来输,我也要查出这些数据,该怎么办?

像下面这样,效率太低;
[color=red]sql="select * from 表名 where region like '%上海%' and region like '%徐汇%' and region like '%办事处%';[/color]
另外,加入条件是不限定的,比如,也可以输入4个条件“上海 徐汇 街道 办事处”就不适合了。

各位sql大侠们,有没有写过这样的sql啊,谢谢大家了。

[b]问题补充:[/b]
也不要像百度那样太复杂的搜索功能的,
其实我的目的就是查出region这个字段里带“%上海%徐汇%办事处%”这样的数据,
只是
[color=red]sql="select * from 表名 where region like '%上海%' and region like '%徐汇%' and region like '%办事处%'; [/color]
这样写太烦了而已。
能不能先查出带%上海%的所有数据,再在查出的数据里查带%徐汇%的数据,再在其中查出带%办事处%的记录。
这样要用复合查询语句吧?
怎么写?

这种应该用搜索的分词来做吧

baidu不会用like的。like的效率可想而知,百度用like,亿级的数据检索而且用like索引是无效的,会遍历整张表检索。

一种解决方案,建立自己的索引表。

把上海,徐家汇,等地名做成索引,建立一张含有字段name,id[引用完整name的id]的索引表,在这张索引表里穷举出用户可能用到得关键词,比如上海办事处,用户可能输入上海 办事处,上海的办事处,分别存储进name,id。查询的时候用where name=?;

这样的好处。
=的效率好于Like;
可以为这张索引表建立索引,提高检索效率。

具体实现,就得靠楼主自己去完成了,版面有限。这里只是给出一个方案。

一般使用 lucence + 疱丁中文分词 来作.

你可以写成

and name like '上海%'
and name like '%徐家%'
and name like '%办事处%'

第一个like 少用一个百分号就可以利用上索引了.
用上索引就会快很多.

[quote]你可以写成

and name like '上海%'
and name like '%徐家%'
and name like '%办事处%'

第一个like 少用一个百分号就可以利用上索引了.
用上索引就会快很多. [/quote]

是这个意思么?怎么感觉是只要两边都用了%分号就不能用索引了。因此这个语句两个都是两边有%分号,因此不能索引。