首页 > 解决方案 > Solr Search:使用“AND”搜索在多个字段中进行搜索

问题描述

我是一家电子商务公司的搜索引擎的产品负责人,我目前正在“发现” Solr——因为我以前从未使用过这个引擎。如果我没有使用正确的术语,请提前道歉。

我有以下典型用例:用户查找“Apple iPhone”。数据集包含 Brand = Apple、Product Name = iPhone、Product Type = Smartphone、Category = Smartphones 等字段。

在我们当前的设置中,根据我们的外部顾问,引擎会提供包含苹果或 iPhone 8 的所有结果。为了首先获得所有 Apple iPhone 作为结果,他们建议我们创建一个新的索引属性,其中包含品牌、产品名称、产品类型和类别合二为一,并用这个新属性替换单个属性(如品牌、产品名称等)。据他们说,Solr 无法提供 AND 搜索(“查找所有在其数据集中包含苹果和 iPhone 的产品”)。

这是正确的吗?你会以同样的方式处理这个用例吗?

我非常怀疑 Solr 不能在分离的属性中查找 Apple iPhone,然后在任一索引属性中提供包含这两个术语的结果。他们建议的更改也意味着我们失去了粒度,因为多个字段被连接到一个中。这也意味着我们将无法再单独提升每个属性,因为它们已被新属性所取代。

我知道我的请求可能会遇到一个“新手”问题,但作为一个非开发人员,我仍然无法弄清楚,顾问们似乎真的认为这是处理这个用例的唯一方法。

感谢大家的帮助!

标签: solr

解决方案


没有任何理由失去粒度;通常您会希望将字段(使用copyField指令)复制到一个或多个字段中以支持不同类型的查询(这也允许您使用不同的权重对不同字段中的命中进行评分)。这样您就可以保留所有原始字段,并且您有一个新的、单独的字段,其中所有内容都作为单个搜索字段。

根据您的查询用例,您可能不需要更多的edismax查询处理程序并qf=Brand ProductName ProductType查询这些字段,并设置q.op=AND(或mm=<factor>)以获得您想要的行为。如果您无法使用 跨字段进行匹配qf,请使用将不同字段复制到其中的字段作为基本匹配(即添加为如上所示SearchField的最后一个字段qf),然后在品牌/名称/等中提升命中。因此,仅“苹果”的精确匹配得分更高。

究竟什么被认为是匹配将取决于该字段发生的标记化和过滤。


推荐阅读