在Solr中,我可以对多值字段中的匹配值进行排序吗?

Mic*_*out 5 sorting solr multivalue

我们正在考虑具有两个多值字段的模式.搜索在第一个字段上执行,但应使用相应的值在第二个字段上进行排序.例如,如果文档由于第一个字段中的第n个值(其中n对于每个匹配可能不同)而匹配,那么它们应该被返回,并按第二个字段中的第n个值排序.

那可能吗?

背景:每个文档都有一个类似文档列表(ID)和相应的相似性得分列表(0到1之间的值).给定ID 42,我们需要返回所有类似文档(例如,在第一个字段中具有42的文档),按照它们与文档42的相似性排序.

我们正在考虑的其他模式是:

  1. 每个ID的动态字段,以便我们可以在搜索类似于42的文档时按字段Similarity_ID42进行排序.这似乎无法扩展,在800K +文档中,CPU在索引期间达到100%.
  2. 一个多值字段存储"ID.score"作为小数(例如42.563),然后搜索值> 42 AND <43的所有文档,并按该值排序(我甚至不确定这个是可能的).

che*_*ffe 3

该方法不会成功,因为您可以搜索,但无法按多值字段排序。这在 Solr 中使用多值字段排序中指出并在 Solr 的 Wiki 中编写

可以对文档的“分数”进行排序,也可以对任何 multiValued="false" indexed="true" 字段进行排序,前提是该字段是非标记化的(即:没有分析器)或使用仅生成单个术语(即:使用 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>
Run Code Online (Sandbox Code Playgroud)

然后您可以在执行实际搜索后进行第二次查询

q=similar_to_id=42&sort=相似度