全文和基于属性的搜索引擎的混合

Cro*_*zin 5 performance search full-text-search

背景:

表示不同类型事件(音乐会,足球比赛,慈善机构等)的SQL数据库,其中每个都包含与事件相关的数据(音乐会 - 艺术家姓名,匹配 - 主持人/访客团队).所有这些事件都从一个通用表继承event,该表包含与所有这些事件相关的数据(名称,描述,位置,开始/结束日期).使用HibernateDoctrine中已知的table-per-subclass模型实现继承.该数据库还存储表artists(id,name,birth_date)和football_teams(id,name,country,coach_name)在使用event_concertsevent_football_matches表(通过FKS).

问题:

创建一个给定一些标准({name: "manchester", startDate: "01.01.2012 - 01.02.2012"}{location: "london", description: "artists +metallica -bieber"})的搜索引擎将返回符合条件的所有事件,以及artists/ football_teamstables的结果.

这些事件的某些属性包含大量文本,应以全文搜索方式进行搜索.

例:

根据以下搜索条件:

{ location: "london", startDate: "05.11.2012 - 07.11.2012" }
Run Code Online (Sandbox Code Playgroud)

搜索引擎应返回:

  1. (橄榄球事件)阿森纳对曼联比赛,酋长球场,伦敦,06.11.2012
  2. (音乐会活动)Metallica音乐会,一些花式位置,05.11.2012
  3. (足球队/非活动)阿森纳,成立时间:1886年,联赛:英超联赛
  4. (足球队/不是活动)切尔西,成立时间:1905年,联赛:英超联赛
  5. (节日活动)万圣节在伦敦,07.11.2012
  6. (舞蹈活动)Sadler's Wells的睡美人,45英镑,07.11.2012
  7. (音乐家,不是活动)Neil Christian,1943 - 2012,Rock'n'Roll主唱

如您所见,仅在事件发生时才考虑startDate(与事件相关的属性).


搜索引擎必须扫描很多表,这就是为什么我认为我应该使用专用软件(Sphinx,Lucene,......?)并为搜索创建单独的索引.


有谁能建议一些建立这样一个指数的解决方案?我可以使用什么软件作为该搜索引擎的基础?


编辑:

只是为了澄清:不需要任何属性.其中一些包含将使用完全匹配搜索的日期,其中一些包含也将使用完全匹配搜索的短文本(如位置).但其中一些包含很长的文本,需要以全文方式进行搜索.

Seb*_*ian -1

SQLite 支持全文索引:

http://sqlite.org/fts3.html