3

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

目前,只有一个快速的临时解决方案可以很好地提高灵活性,但速度始终是个问题。模块注册它们希望可搜索的模型(以及关系和列)。搜索时,搜索功能使用这些关系查询数据并应用 Levenshtein,删除停用词,进行字符替换等。显然,随着数据量的增加,这将减慢速度,因此无法有效地保留它select * from x,y,z,然后通过数据。

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

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

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

浏览各种教程和指南,它们似乎都相对容易设置和配置。在上述情况下,我可以让模块注册配置文件/搜索索引模型的路径,并让搜索器通过搜索程序 x 运行它们。这将建立我的索引,并提供查询数据的方法。美好的。

我不明白这些索引中的任何一个与我的其他代码有什么关系。如果我对数据进行索引、搜索,然后使用 Solr 找到结果,我怎么知道如何获取与它找到的位相关的所有其他信息?

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

当然,我没有像通常那样广泛阅读这方面的内容,因为我目前在方向方面有点卡住,我宁愿不阅读所有内容,而是向那些知道的人寻求一些建议在我采取特定路线之前。

编辑:这个问题似乎让我更倾向于 Solr。这里也有一个类似的线程,对 Sphinx 有相当多的了解。

4

1 回答 1

0

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

如果我对数据进行索引、搜索,然后使用 Solr 找到结果,我怎么知道如何获取与它找到的位相关的所有其他信息?

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

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

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

于 2013-05-20T12:03:49.107 回答