我的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
统计为一个字段?
答案 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的文档。