我们正在考虑具有两个多值字段的模式。搜索在第一个字段上执行,但应使用相应的值在第二个字段上进行排序。例如。如果文档由于第一个字段中的第n个值匹配(其中n对于每个匹配可能不同),那么它们应该按第二个字段中的第n个值排序。
这可能吗?
背景:每个文档都有一个类似文档列表(ID)和相应的相似性得分列表(0到1之间的值)。鉴于ID 42,我们需要返回所有类似的文档(例如,在第一个字段中包含42个文档),按照它们与文档42的相似性排序。
我们正在考虑的其他架构是:
答案 0 :(得分:3)
该方法不会成功,因为您可以搜索,但不能按多值字段排序。这在Sorting with Multivalued Field in Solr和written in Solr's Wiki
中指出可以对文档的“得分”进行排序,也可以对任何multiValued =“false”indexed =“true”字段进行排序,前提是该字段是非标记化的(即:没有分析器)或使用分析器只产生一个Term(即:使用KeywordTokenizer)
<强>更新强>
关于备选方案,当您指出需要为一个给定ID找到类似的文档时,为什么不创建一个具有类似
的架构的第二个核心<fields>
<field name="doc_id" type="int" indexed="true" stored="true" />
<field name="similar_to_id" type="int" indexed="true" stored="true" />
<field name="similarity" type="string" indexed="true" stored="true" />
</fields>
<types>
<fieldType name="int" class="solr.TrieIntField"/>
<fieldType name="string" class="solr.StrField" />
</types>
然后,您可以在执行实际搜索后执行第二次查询
Q = similar_to_id = 42&安培;排序=相似性