solr - 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,然后在任一索引属性中提供包含这两个术语的结果。他们建议的更改也意味着我们失去了粒度,因为多个字段被连接到一个中。这也意味着我们将无法再单独提升每个属性,因为它们已被新属性所取代。
我知道我的请求可能会遇到一个“新手”问题,但作为一个非开发人员,我仍然无法弄清楚,顾问们似乎真的认为这是处理这个用例的唯一方法。
感谢大家的帮助!
解决方案
没有任何理由失去粒度;通常您会希望将字段(使用copyField
指令)复制到一个或多个字段中以支持不同类型的查询(这也允许您使用不同的权重对不同字段中的命中进行评分)。这样您就可以保留所有原始字段,并且您有一个新的、单独的字段,其中所有内容都作为单个搜索字段。
根据您的查询用例,您可能不需要更多的edismax
查询处理程序并qf=Brand ProductName ProductType
查询这些字段,并设置q.op=AND
(或mm=<factor>
)以获得您想要的行为。如果您无法使用 跨字段进行匹配qf
,请使用将不同字段复制到其中的字段作为基本匹配(即添加为如上所示SearchField
的最后一个字段qf
),然后在品牌/名称/等中提升命中。因此,仅“苹果”的精确匹配得分更高。
究竟什么被认为是匹配将取决于该字段发生的标记化和过滤。
推荐阅读
- logstash - Logstash 将“yyyy-MM-dd”转换为“yyyy-MM-dd'T'HH:mm:ss.SSSZ”
- ios - 选择表格视图单元格时无法触发segue(一次)
- python - 在 a 中分隔文本
标签
- linux - 由于证书无效,来自我的 linux vm (Centos) 的所有 https 请求都失败
- powershell - 使用日期等创建多个文件夹 190101 到 191231
- python - Python Pandas 合并和更新数据框
- java - 如何修复:Android Studio IDE 上的 Gradle 中出现“无法解析:com.android”错误
- javascript - 比较两个数组对象的属性并将其存储在一个新数组中
- c++ - 如何在扩展名为 BMP 的 img 中找到 16 种最常见的颜色
- .net - 将强类型 Razor 视图与在运行时加载的视图模型一起使用