gpt4 book ai didi

solr 在 croes 中加入多值字段查询

转载 作者:行者123 更新时间:2023-12-05 06:31:41 25 4
gpt4 key购买 nike

我在 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/

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