Sybase + Spring MVC + ???导致全文搜索功能

时间:2013-08-15 07:55:08

标签: spring-mvc full-text-search sybase-ase

我们正在运行基于Spring MVC(3.2.3),Hibernate(3.3.2)和Sybase ASE 15.5作为底层数据库的Web应用程序。我们有几个数据实体(订单,参与者,客户等),我们的客户要求是搜索应该非常灵活。这意味着用户可以在搜索字段中输入一个或多个搜索词,并且该字符串(或数字或日期)可以是任何已定义的“可搜索”字段列表的部分匹配。

目前,这会导致以

形式出现的丑陋搜索SQL
select ...
from ORDERS ordermodel0_ 
inner join ADDRESSMASTER addressmas1_ on ordermodel0_.OWNERID=addressmas1_.ID 
where (ordermodel0_.TITLE like '%smith%' 
or ordermodel0_.EXTERNALNR like '%smith%' 
or addressmas1_.NAME like '%smith%' 
or addressmas1_.FIRSTNAME like '%smith%' 
or exists (select participan2_.ID from PARTICIPANTS participan2_ 
where ordermodel0_.ID=participan2_.ORDERID 
and (participan2_.FIRSTNAME like '%smith%' 
or participan2_.LASTNAME like '%smith%'))) 

最终,这会导致查询计划读取所有这些表(表扫描),因为通配符搜索不允许使用任何索引。我们在ORDERS上有500k行,在PARTICIPANTS上有120万行,在ADDRESSMASTER上有500k行。由于数据如此之少,搜索结果几乎可以立即获得,但事实并非如此。搜索最多可能需要几秒钟,具体取决于锁定等待的次数。

全文搜索会解决此问题吗?有没有人有类似已经解决的情况的经验? Sybase过去常常提供“ASE - 增强型全文搜索选项”,但已停止使用而无需替换。我们应该研究一下Apache Lucene吗?

由于 西蒙

0 个答案:

没有答案