如何将搜索索引与MVC中的模型相关联?

时间:2013-05-20 11:02:54

标签: solr lucene search-engine elasticsearch sphinx

我有一个MVC应用程序,我需要能够搜索。该应用程序是模块化的,因此模块需要很容易注册数据以便与搜索模块进行索引。

目前,只有一个快速的临时解决方案,这对于灵活性很好,但速度总是一个问题。模块注册他们想要搜索的模型(以及关系和列)。在搜索时,搜索功能使用这些关系查询数据并应用Levenshtein,删除停用词,进行字符替换等。显然,随着数据量的增加,这将减慢,因此保持有效select * from x,y,z然后挖掘数据。

上述的好处是与发现数据的模型有直接关系。例如,如果Model_Product找到了某些内容,我知道在我的代码中我可以使用Model_Product::url()将结果关联到相关位置,或Model_Product::find(other data)显示说明图像或说明例如,在标题中找到了关键字。

上述的另一个好处是它已经是特定于数据库的,因此可以被抛到虚拟主机上并且它可以工作。

我已经阅读了各种选项,它们看起来非常相似,所以人们不太可能在不引发讨论或辩论的情况下建议“正确”,而是为了记录;从以下选项中,Solr似乎是我倾向于的那个。我不是一成不变的,所以如果有人有任何建议他们想分享或我可以看到的其他选择,那就太好了。

通过各种教程和指南,它们看起来相对容易设置和配置。在上面的例子中,我可以让模块注册配置文件/搜索索引模型的路径,并让搜索者通过搜索程序x运行它们。这将构建我的索引,并提供查询数据的方法。细

我不明白这些索引是如何与我的其他代码相关的。如果我索引数据,搜索并依次找到Solr的结果,我怎么知道如何获得与它找到的位相关的所有其他信息?

还有人能够确认我是否需要为每个虚拟主机拥有上述任何一个实例?这是我似乎无法找到很多信息的东西。我会假设我可以连接到单个实例并告诉它哪些数据是相关的?就像连接到单个DBMS服务器一样,凭证x到数据库y。

当然,我没有像往常那样对此进行广泛的阅读,因为我目前在方向方面有点困难,我宁愿不读所有关于一切的内容,而是寻求一些建议。那些在我采取特定路线之前就知道的人。

编辑:This question似乎让我更倾向于Solr。还有一个类似的线程here,对Sphinx有相当多的洞察力。

1 个答案:

答案 0 :(得分:0)

免责声明:我只能谈论Lucene / Solr,我相信ElasticSearch,因为我知道它基于Lucene。其他人可能会或可能不会以同样的方式工作。

  

如果我索引数据,搜索并依次找到Solr的结果,如何   我是否知道如何获得与该位相关的所有其他信息   它找到了吗?

您可以存储所需的任何额外数据,例如指向数据库中特定行的数据库键。 Lucene / Solr还可以帮助您查找相关信息,例如如果你经营DVD租赁店并且用户拼错了电影名称,Lucene会为你解决这个问题(与DB不同)仍然列出最接近的选择。您还可以通过在索引或查询期间提升某些字段来提供提示。 geospatial search等有特殊扩展名。显然,如果需要,您可以提供自己的扩展名。

  

也有人能够确认我是否需要一个   每个虚拟主机的上述任何一个实例?

Lucene是一个低级库,必须存在于您运行的每个JVM中。 Solr(建立在Lucene之上)是一个HTTP服务器。您可以根据需要从多个客户端调用它。更多缩放选项解释here