Search 为什么搜索查询应该(或不应该)只返回文档ID?

Search 为什么搜索查询应该(或不应该)只返回文档ID?,search,full-text-search,solr,sphinx,Search,Full Text Search,Solr,Sphinx,因此,对于一个新项目,我正在为一个电子商务网站构建一个系统。我们的想法是从供应商处进口产品,而不是将其直接插入我们的目录,我们将所有信息存储在一个暂存区。每个供应商都有自己的stage,即数据库中的表,然后我将把多个staging区域扁平化为单个实体,当前为单个表,但稍后可能会扁平化为Sphinx或Solr。然后,我们的销售人员将能够搜索暂存产品的相关字段名称和描述,并显示匹配的产品列表,然后选择将这些产品推送到实时目录中。搜索将在单个表上查询展平的临时区域 我的设计只调用在单个展平表中存储可搜

因此,对于一个新项目,我正在为一个电子商务网站构建一个系统。我们的想法是从供应商处进口产品,而不是将其直接插入我们的目录,我们将所有信息存储在一个暂存区。每个供应商都有自己的stage,即数据库中的表,然后我将把多个staging区域扁平化为单个实体,当前为单个表,但稍后可能会扁平化为Sphinx或Solr。然后,我们的销售人员将能够搜索暂存产品的相关字段名称和描述,并显示匹配的产品列表,然后选择将这些产品推送到实时目录中。搜索将在单个表上查询展平的临时区域

我的设计只调用在单个展平表中存储可搜索和可过滤字段,例如名称、描述、供应商id、供应商生产id等,搜索查询将只返回匹配项的id和用于标识产品来自哪个暂存区的类别供应商id

另一位高级工程师认为,扁平化的搜索表应该包括其他不会被搜索的元字段,但可以在将产品从后台“推送”到实时目录时使用。他还认为查询应该返回所有其他信息

我强烈地感觉到,在扁平表中只有可搜索的字段,并且只有搜索返回的class/id对可以用于从class_表中获取产品simple select*的所有其他必要元数据,其中id位于1,2,3中

我的部分理由是,这将使以后更容易将扁平表从数据库切换到sphinx或solr之类的搜索服务器,并且不必仅仅因为搜索的实现发生了变化就更改其余代码


我走对了吗?我如何才能说服另一位工程师,为什么只保留可搜索字段并只返回ID很重要?或者更具体地说,为什么搜索应用程序只返回对象的ID?

我认为您走的是正确的道路。如果这些其他字段没有提供值来唯一标识暂存项或允许用户过滤暂存项,那么在将该项推送到实时环境之前,数据基本上是无用的。如果另一位工程师认为额外的元数据将帮助用户做出更明智的决策,那么您也可以让这些额外的字段可以搜索,从而满足表的指定用途


我能想到的预取其他不可搜索数据的唯一原因是为了提高推送到实时环境的性能。

在sphinx的情况下,它只会将文档ID和命名属性返回给您,但大多数情况下,属性都是数字数据。我认为您的想法是正确的,因为如果需要,其他元数据只是一个简单的连接,远离扁平表。

您应该使用每个工具来实现它的最佳功能。一个全文搜索引擎,如Solr或Sphinx,擅长搜索文本字段和快速排列点击。它在以类似select的方式检索存储的数据方面没有特别的优势。数据库为此进行了优化。所以,是的,你走的是正确的道路。有关决定在搜索引擎中存储内容所涉及的其他问题,请参阅。

您可以将Solr视为一个强大的索引,因此,当索引返回ID时,Solr也会这样做是合乎逻辑的

您可以使用solr查询参数fl来请求仅标识符的结果,例如fl=id

然而,有一个特性也需要solr为您返回一些数据:在匹配的文档中突出显示搜索词。如果您不需要它,那么使用solr只检索标识符就可以了,我假设您只需要文档列表,而不需要其他功能,比如facet、相关文档或拼写检查


这就是说,如何在搜索函数中构建对象应该很重要,可以使用惟一的solr从DB检索id,也可以从solr返回的字段(如果它们已存储)甚至是两者的混合。考虑solr以获得“突出显示的”内容字段,并获得其他字段的DB。同样,如果不需要突出显示,这也不是问题。

我使用Solr处理数千个文档,但仅返回ID,原因如下:

对于Solr: -如果有同步错误,这不是什么大问题,尤其是在你的情况下,显示不同的价格可能是一个大问题。。。这就好像项目不在正确的位置,但数据是正确的 -您将节省大量时间,因为当您不要求Solr返回文档的“描述”时,我指的是多行文本

对于您的数据库: -您可以缓存您的结果,因此使用ID更快,您不需要每次都从Solr获取所有数据!!! -您构建的结果与w相同 当您想从Solr构建html时,您不需要特定的方法,也不需要从DB构建其他方法


我认为还有很多…

是有道理的。在我的示例中,即使某些字段被放入“搜索表”,我们仍然必须在推送live之前点击暂存区域以完全收集所有必要的信息。根据您的论点,搜索引擎更适合文本字段,将这些文本字段包括在表中不是更好吗?由于此搜索功能将被移动到搜索引擎。搜索引擎更适合搜索文本字段。它在存储只用于显示而不用于搜索的文本方面没有优势。因此,Safoo应该只将他希望搜索的文本字段放在表中,然后放在搜索引擎中。