您好,我已阅读 Solr wiki 并在此处搜索,但没有找到适合我用例的解决方案:
我们正在将具有不同类型合同的客户数据索引到一个文档中。因此,每个客户都会生成一份包含一份或多份不同合同的 Solr 文档。
每个合约的字段通过导入动态添加(例如contract_type_1_s、contract_type_2_s、...;contract_change_date_1_dt、contract_change_date_2_dt、...)。因此,所有带有“ 2 ”的字段都与第 2 号合同相关。这样,用户可以搜索具有第 1 类合同但没有第 2 类合同的客户,依此类推。
我的用例现在只返回与查询匹配的合同字段。
这是一个例子:
<doc>
<field name="id">100</field>
<field name="customer_name">paul</field>
<field name="contract_type_1_s">inhouse</field>
<field name="contract_change_date_1_dt">2012-09-01T00:00:00Z</field>
</doc>
<doc>
<field name="id">101</field>
<field name="customer_name">fred</field>
<field name="contract_type_1_s">inhouse</field>
<field name="contract_change_date_1_dt">2012-09-01T00:00:00Z</field>
<field name="contract_type_2_s">external</field>
<field name="contract_change_date_2_dt">2012-09-01T00:00:00Z</field>
</doc>
<doc>
<field name="id">102</field>
<field name="customer_name">karl</field>
<field name="contract_type_1_s">external</field>
<field name="contract_change_date_1_dt">2012-09-01T00:00:00Z</field>
<field name="contract_type_2_s">inhouse</field>
<field name="contract_change_date_2_dt">2012-09-01T00:00:00Z</field>
</doc>
如果用户现在搜索合同类型为“外部”的客户,则结果中包含 ID 为101和102的文档。现在我想返回与查询匹配的合同的不同字段。
在此示例中,对于文档102,它们应该是contract_change_date_1_dt ,对于文档101 ,它们应该是contract_change_date_2_dt,因为 1 号合同在文档 102 中是外部的,而 2 号合同在文档 101 中是外部的。
有没有办法通过内置组件实现这种行为?
我知道我可以找出哪些字段与查询与突出显示组件相匹配。
我最终得到以下解决方案,但它迫使我扩展 Solr:
- 编写一个 QParser 来识别需要字段,将它们添加到 fl-param
- 在将结果返回给客户端之前执行突出显示查询
- 遍历结果中的所有文档并将与每个文档的查询匹配的字段添加到结果列表中
我希望我把我的问题说清楚了。非常感谢任何可以将其存档的好方法的建议。
问候勒内