solr:facet搜索多值包含多次相同值的多值字段

时间:2017-08-18 13:22:24

标签: json solr

我的solr文档中有一个这样的字段(用JSON格式):

someField = [Value1, Value2, Value3, Value4,...];

我想知道有多少文件包含这些值。

我正在执行的构面搜索有效,但存在一个问题:值表示层次结构(由序列表示),相同的值可能出现在层次结构中的不同级别上(表示不同的实体)。

E.g。

(in document1) someField = [Value1, Value2, Value3, Value4];
(in document2) someField = [Value1, Value3, Value4, Value5];
(in document3) someField = [Value1, Value3, Value3, Value4];

所以我的结果应该是这样的:

Value1 = 3
Value2 = 1
Value3 = 2 (level 2)
Value3 = 2 (level 3)
Value4 = 1 (level 3)
Value4 = 2 (level 4)
Value5 = 1

在插入文档时,我可以看到插入

Value1, Value3, Value3

已正确插入(Solr不会将其转换为Value1, Value3

我如何才能实现这一目标,即:即让Solr分别处理someFiled的每个级别,而不是将所有Value3统计为一个字段?

1 个答案:

答案 0 :(得分:0)

你做不到。在进行分面时,令牌是一种标记。

然而,您可以使用辅助字段,并在索引(来自您自己的代码)时为您的令牌添加元信息,其中包含令牌所在的级别。

因此,对于上面的示例,您将有一个名为someField_indexed的第二个字段包含内容:

[1_Value1, 2_Value2, 3_Value3, 4_Value4]
[1_Value1, 2_Value3, 3_Value4, 4_Value5]
[1_Value1, 2_Value3, 3_Value3, 4_Value4]

结果方面将是:

1_Value1: 3
2_Value2: 1
2_Value3: 2
3_Value3: 2
3_Value4: 1
4_Value4: 2
4_Value5: 1

当您从构面显示内容时,删除所有内容,包括第一个_。它还允许您正确过滤值的位置(即仅使用fq=someField_indexed:2_Value3显示第二个位置具有Value3的文档。