solr查询建议

Solr query suggestions

我正在构建一个定制的电子商务网站,并使用 SOLR (4.8.1) 制作 indexing/searching 产品。

我想提供一个具有自动完成功能的搜索字段,以在用户键入时提示建议来帮助他们:

就像这个例子(取自www.extra.com.br

第二部分(产品建议)很简单,基本上就是像普通搜索一样查询 SOLR 并获得前 5 名。

让我夜不能寐的第一部分(查询建议):)

我已经尝试了一些替代方案,例如 Suggester 组件 (/suggest),还尝试使用 进行常规搜索 (/select)方面.

我已经完成了对单个词的建议,但我真正想要的是预测性建议,如上面的印刷品。如果用户键入 "monit",它会根据实际存在的产品提出 queries/products 的建议。例如,如果用户键入 "monitor banana",它应该什么都不带(因为它不存在),但在我的例子中,它建议 "monitor banana",因为这两个词分别存在于索引中。 (即使他们之间没有关系)

任何人都可以指出正确的方向来完成这个吗?非常感谢带有示例(甚至一本书)的教程。

为了弄清楚我需要什么,Google Commerce Search 提供了什么(我想他们已经停产了):https://www.youtube.com/watch?v=nje9fUcIkKc

谢谢!

建议的搜索可能是过去流行的搜索(但只有那些 return 结果),或者一组管理员添加的建议搜索,或者统计生成的将 return 结果的术语组合. (或者,可能是组合。)但无论如何,您将不得不提出一个可以建议的搜索列表。该列表可能包含也可能不包含评级(最受欢迎或最重要的搜索评级最高)。

我会采用该列表,并将其作为一组完全独立于您的产品记录的文档插入到 Solr 中。您可以将它们放在同一个 Solr 内核中(并适当地过滤搜索)或放在它们自己的内核中。并且您希望确保搜索字符串的索引方式与产品记录中重要文本字段的方式相同。 (如果您的自动完成功能像您所包含的屏幕截图一样工作,那么您似乎会使用大量 n-gram 索引。)如果您的搜索被评级,我会使用这些评级来为个人提供创纪录的提升搜索记录。

现在,如果搜索和产品位于两个独立的核心中,您将对用户输入的任何内容执行两次自动完成搜索。如果它们位于同一个 Solr 核心中,理论上您可以获得热门搜索同时使用 Result Grouping。为此,您需要有一个编码为 multiValued="false" 的记录类型字段,但在其他方面的设置就像您将要设置的分面字段(即 indexed="true" stored="true")如果此字段只有两个可能的值(产品和搜索,也许吧?),然后您可以通过以下查询获得每个 "group" 的热门点击:

http://localhost:8080/solr/core0/search?group=true&
                         group.field=recordType&group.limit=5&q=monit

这将为您提供前 5 个搜索和匹配 "monit" 的前 5 个产品。您将不可避免地拥有一种不想建议搜索的搜索模式。届时,您可以通过执行过滤查询而不是分组查询来免除获取搜索建议。

http://localhost:8080/solr/core0/search?fq=recordType:product&q=tv monitor

或者,两个独立的核心可能是一个更好的主意,具体取决于您计划如何维护两组记录、索引的大小等。

谢谢@frances 的回答。

我通过以下方式成功完成了我需要的(某种程度上):

  • 创建了一个名为 "suggestions" 的新核心;
  • 创建了一个新的存储过程以使用建议组合填充核心,例如:模型、类别 + 模型、模型 + 类别、供应商 + 模型 + 类别等

  • 在我的 Web 应用程序中创建了一个新端点(操作),它向 SOLR 执行 2 个内部 HTTP 请求,第一个到 "suggestions" 核心,第二个到常规产品搜索核心。

  • 将结果分组为 JSON 对自动完成 javascript 组件 return 的回答(我正在使用这个:https://www.devbridge.com/sourcery/components/jquery-autocomplete/

我知道一个更完美的解决方案是当建议实际上基于以前的用户搜索记录时,但虽然我没有,但结果已经足够好了。

打印如下: