Dynamic Solr为结果中的每个文档返回不同的输出字段
您好,我已阅读Solr wiki并在此处搜索,但未找到适用于我的用例的解决方案: 我们正在将具有不同类型合同的客户数据索引到单个文档中。 因此,每个客户将生成一个包含一个或多个不同合同的Solr文档 通过导入动态添加每个合同的字段(例如,合同类型1、合同类型2、…;合同变更日期1、合同变更日期2、…)。因此,所有带有“2”的字段都与第2号合同相关。 有了它,用户就可以搜索拥有第一类合同而没有第二类合同的客户,以此类推 我的用例现在只返回与查询匹配的合同字段 下面是一个例子:Dynamic Solr为结果中的每个文档返回不同的输出字段,dynamic,solr,field,Dynamic,Solr,Field,您好,我已阅读Solr wiki并在此处搜索,但未找到适用于我的用例的解决方案: 我们正在将具有不同类型合同的客户数据索引到单个文档中。 因此,每个客户将生成一个包含一个或多个不同合同的Solr文档 通过导入动态添加每个合同的字段(例如,合同类型1、合同类型2、…;合同变更日期1、合同变更日期2、…)。因此,所有带有“2”的字段都与第2号合同相关。 有了它,用户就可以搜索拥有第一类合同而没有第二类合同的客户,以此类推 我的用例现在只返回与查询匹配的合同字段 下面是一个例子: 100 保罗 室内
100
保罗
室内
2012-09-01T00:00:00Z
101
弗雷德
室内
2012-09-01T00:00:00Z
外部的
2012-09-01T00:00:00Z
102
卡尔
外部的
2012-09-01T00:00:00Z
室内
2012-09-01T00:00:00Z
如果用户现在搜索合同类型为“外部”的客户,则结果中将包含ID为101和102的文档。现在我想返回与查询匹配的合同的不同字段
在本例中,对于文件102和文件101,应分别为合同变更日期和合同变更日期,因为合同编号1在文件102中是外部的,合同编号2在文件101中是外部的
有没有办法通过内置组件实现这种行为
我知道我可以找出哪些字段与突出显示组件匹配查询 我以以下决议结束,但它迫使我扩展Solr:
问候勒内如果有人需要类似的东西;-) 现在,我通过以下方式建立了自定义结果列表: 创建自定义QueryComponent(扩展标准QueryComponent)以存储查询中使用的字段。在准备方法中,使用存储的字段激活高亮显示:
//使参数可修改
ModifiableSolrParams modifiableParams=新的ModifiableSolrParams(params);
要求设置参数(可修改参数);
modifiableParams.set(HighlightParams.FIELDS,queryFieldList);
modifiableParams.set(HighlightParams.HIGHLIGHT,“true”);
modifiableParams.set(HighlightParams.FIELD_匹配,“true”);
modifiableParams.set(HighlightParams.SIMPLE_PRE,“”);
modifiableParams.set(HighlightParams.SIMPLE_POST,“”);
创建自定义HighlightComponent(扩展标准HighlightComponent)以根据标准结果生成结果。在process方法中,我现在可以获得突出显示信息并提取我需要的信息:
NamedList rspValues=rb.rsp.getValues();
NamedList nlHl=(NamedList)rspValues.get(“突出显示”);
this.hlDocsAndFields=提取HighlightingInfo(nlHl);
为此,我创建了一个自定义列表,它能够计算每个合同的匹配项(突出显示的结果中有多少合同字段)
这个很好用
现在,我把注意力集中在响应编写者身上,他在构建响应时自己解析文档字段:-(
有没有关于更改/定制回复作者的建议
你好,勒内我现在处理好了整个事情 我绝对不能改变作者的回答:-) 我只需存储我为每个文档解析的所有字段,并将它们添加到响应中:
rb.rsp.setReturnFields(globalResultFields);
你好René因为您知道“哪个字段匹配”问题的情况,并且希望避免扩展Solr,所以我建议您获取所有文档的所有字段,然后在客户端解析结果。顺便说一句,如果你使用正确的用户名和永久帐户,你会得到更多的回复。嘿,谢谢你的回复。问题是,如果一个客户有很多合同,那么每个文档都有很多字段。目前最大值约为470。在一个特定的案例中,我需要读取多达40000个客户,这将是一个巨大的数据量,只需扔掉60%…因为您要在单个Solr文档中合并不同的合同,但您只需要返回匹配的合同…为什么不将每个合同作为不同的文档进行索引?您好,javanna,感谢回复:-)用户应该能够在一次查询中按条件从合同和客户数据中搜索,因此我们需要将所有数据一起索引。如果我们对合同进行独立索引,我们就失去了客户和合同之间的关系。