gpt4 book ai didi

solr - 解析 SolrJ Facet Pivot 响应

转载 作者:行者123 更新时间:2023-12-03 20:19:31 26 4
gpt4 key购买 nike

我有一个 Solr 架构,我试图通过在 facet.pivot 参数中传递多个字段来对其进行 Facet Pivoting,同时通过 SolrJ 进行调用。我的 Solr 响应如下所示:

"facet_pivot": {
"boolean_value,int_value": [
{
"field": "boolean_value",
"value": false,
"count": 1,
"pivot": [
{
"field": "int_value",
"value": 364,
"count": 1
}
]
},
{
"field": "boolean_value",
"value": true,
"count": 2,
"pivot": [
{
"field": "int_value",
"value": 406,
"count": 1
},
{
"field": "int_value",
"value": 409,
"count": 1
}
]
}
]
}

我如何使用 SolrJ 以嵌套对象的形式解析上述响应,即 PivotField 具有哪个 int_value 属于哪个 boolean_value 的关系。

SolrJ 版本尝试:4.10.4

更新:

当您通过 SolrJ 进行调用时,请检查生成的 SolrQuery。在我上面的例子中,SolrQuery 是:

facet.pivot=boolean_value&facet.pivot=int_value

Solr 将上述枢轴视为两个不同的枢轴,您不会得到嵌套的枢轴。对于嵌套透视,您的 SolrQuery 应该具有

facet.pivot=boolean_value,int_value

最佳答案

我遇到了同样的问题并编写了一个简单的测试应用程序。它查询 Solr 并将枢轴值作为分层字符串写入 StdOut。如果有任何建议可以更好地实现它,请告诉我。这是代码:

public class Tester {

public static final String HIERARCHICAL_FACET_SEPARATOR = "/";

public static void main(String[] args) throws SolrServerException, IOException {
CloudSolrClient solr = ... ;
SolrQuery query = new SolrQuery(...);
query.setFacet(true);
query.addFacetPivotField(new String[]{"field1,field2,field3"});
QueryResponse result = solr.query(query);
NamedList<List<PivotField>> facetPivot = result.getFacetPivot();
List<String> parsedPivotResult = parsePivotResult(facetPivot);
parsedPivotResult.forEach((s) -> {
System.out.println(s);
});
}

private static List<String> parsePivotResult(final NamedList<List<PivotField>> pivotEntryList) {
final Set<String> outputItems = new HashSet<>();
for (final Entry<String, List<PivotField>> pivotEntry : pivotEntryList) {
System.out.println("Key: " + pivotEntry.getKey());
pivotEntry.getValue().forEach((pivotField) -> {
renderOutput(new StringBuilder(), pivotField, outputItems);
});
}
final List<String> output = new ArrayList<>(outputItems);
Collections.sort(output);
return output;
}

private static void renderOutput(final StringBuilder sb, final PivotField field, final Set<String> outputItems) {
final String fieldValue = field.getValue() != null ? ((String) field.getValue()).trim() : null;
final StringBuilder outputBuilder = new StringBuilder(sb);
if (field.getPivot() != null) {
if (outputBuilder.length() > 0) {
outputBuilder.append(HIERARCHICAL_FACET_SEPARATOR);
}
outputBuilder.append(fieldValue);
outputItems.add(new StringBuilder(outputBuilder).append(" (").append(field.getCount()).append(")").toString());
field.getPivot().forEach((subField) -> {
renderOutput(outputBuilder, subField, outputItems);
});
} else {
if (outputBuilder.length() > 0) {
outputBuilder.append(HIERARCHICAL_FACET_SEPARATOR);
}
outputBuilder.append(fieldValue);
outputItems.add(outputBuilder.append(" (").append(field.getCount()).append(")").toString());
}
}
}

关于solr - 解析 SolrJ Facet Pivot 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38335937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com