作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 solr 中有两个核心,master 和 child。
master core上的一些示例数据是这样的
{master_id:1,child_ids:[123,456]}
子核心的样本数据就像
[{child_id:123,"Name":"ABC Ltd"},{child_id:456,"Name":"xyz ltd"}]
master core 中的 child_ids 是多值字段,因此 name 在 master core 中包含“s”。
我怎样才能加入这两个核心,我会得到这样的结果
master_id,child_id,name
1,123,"ABC Ltd"
1,456,"xyz ltd"
最佳答案
Solr 中的连接查询解析器不能包含来自连接两侧的字段,但通过使用 Streaming Expression,您可以创建一个从两侧返回完整文档的 Stream。
提供您正在查看的结果的流表达式可能是:
hashJoin(
search(joinahoy, q=child_id:[* TO *], fl="child_id,Name", sort="child_id asc"),
hashed=cartesianProduct(
search(joinahoy, q=master_id:[* TO *], fl="master_id,child_ids", sort="master_id asc"),
child_ids
),
on="child_id=child_ids"
)
hashJoin
装饰器接受两个流并返回一个文档,其中包含来自两个流的字段。 hashJoin 会将右侧的完整流(通过 hashed
给出)读入内存,然后在将它们连接到左侧时查找这些值(第一个查询)。
您也许可以使用 innerJoin
装饰器而不是 cartesianProduct
装饰器上的排序规范,但我在试验时无法让它工作。
cartesianProduct
装饰器为主文档的多值字段 (child_ids
) 中的每个值返回一个文档。
结果是一组映射到您想要的格式的 JSON 文档:
{
"result-set": {
"docs": [
{
"master_id": 1,
"child_id": 123,
"child_ids": 123,
"Name": [
"ABC Ltd"
]
},
{
"master_id": 1,
"child_id": 456,
"child_ids": 456,
"Name": [
"xyz ltd"
]
},
{
"EOF": true,
"RESPONSE_TIME": 9
}
]
}
}
如果您不想返回两个子 ID 字段,可以将 hashJoin
包装在 select
装饰器中。
关于solr 在 croes 中加入多值字段查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51703559/
我在 solr 中有两个核心,master 和 child。 master core上的一些示例数据是这样的 {master_id:1,child_ids:[123,456]} 子核心的样本数据就像
我是一名优秀的程序员,十分优秀!