Solr查询建议

时间:2015-03-20 14:01:18

标签: solr autocomplete autosuggest search-suggestion

我正在建立一个定制的电子商务网站,并使用SOLR(4.8.1)来索引/搜索产品。

我想提供一个带有自动填充功能的搜索字段,以便在用户输入时提示建议来帮助用户:

  • 显示搜索建议(术语/词组)[前5]
  • 显示项目建议[前5]

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

enter image description here

第二部分(产品建议)很简单,基本上只是查询SOLR,正常搜索会做并进入前5名。

第一部分(查询建议)让我在晚上保持清醒:)

我已经尝试了一些替代方案,例如建议者组件(/建议),并尝试使用 facets 进行常规搜索(/ select)。

我已经完成了对单个单词的建议,但我真正想要的是预测性建议,如上面的印刷品。如果用户键入" monit",它会根据真正存在的产品提供查询/产品的建议。例如,如果用户键入"监视香蕉",它应该不带任何东西(因为它不存在),但在我的情况下,它建议"监视香蕉"因为索引中单独存在2个单词。 (即使他们之间没有任何关系)

有人能指出我正确的方向来实现这一目标吗?非常感谢带有示例(甚至书籍)的教程。

要明确我的需求,确切地说是Google Commerce Search提供的内容(我认为他们已停止使用):https://www.youtube.com/watch?v=nje9fUcIkKc

谢谢!

2 个答案:

答案 0 :(得分:1)

建议的搜索可能在过去的搜索中很受欢迎(但只有返回结果的搜索),或者一组管理员添加的建议搜索,或统计生成的将返回结果的术语组合。 (或者,可能是一种组合。)但无论如何,您将不得不想出一个可以建议的搜索列表。该列表可能包括也可能不包括评级(最受欢迎或最重要的搜索被评为最高)。

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

现在,如果搜索和产品位于两个独立的核心中,您将对用户键入的内容进行两次自动完成搜索。如果它们位于相同的Solr核心中,理论上您可以获得两者的最高匹配一旦使用Result Grouping。为此,您需要有一个编码为multiValued="false"的记录类型字段,但是设置方式与facet字段一样(即indexed="true" stored="true")如果此字段只有两个可能的值(产品)并搜索,也许?),然后你可以得到每个"组"查询如下:

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

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

答案 1 :(得分:1)

谢谢@frances的回答。

我设法通过以下方式完成了我所需要的(

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

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

  • 将结果分组到一个JSON答案中以返回自动完成javascript组件(我正在使用此组件:https://www.devbridge.com/sourcery/components/jquery-autocomplete/

我知道一个更完美的解决方案是当这些建议实际上基于以前的用户搜索记录时,但是虽然我没有,但结果还是不错的。

在下方打印:

enter image description here