gpt4 book ai didi

solr4 - Solr CollapsingQParserPlugin with group.facet=on style facet counts

转载 作者:行者123 更新时间:2023-12-01 00:59:49 26 4
gpt4 key购买 nike

我使用 Solr 4.7.0 有一个大约 500 万个文档的 Solr 索引,大小为 8GB。我需要在 Solr 中分组,但发现它太慢了。下面是组配置:

group=on
group.facet=on
group.field=workId
group.ngroups=on

这台机器有 24GB 的充足内存,4GB 分配给 Solr 本身。与关闭分组时的 90 毫秒相比,查询通常需要大约 1200 毫秒。

我遇到了一个名为 CollapsingQParserPlugin 的插件,它使用过滤器查询来删除除一组之外的所有内容。

fq={!collapse field=workId}

它专为具有许多唯一组的索引而设计。我有大约 380 万。这种方法在大约 120 毫秒时快得多。除了一件事外,这对我来说是一个很好的解决方案。因为它过滤掉了组的其他成员,所以只计算代表文档中的方面。例如,如果我有以下三个文件:
"docs": [
{
"id": "1",
"workId": "abc",
"type": "book"
},
{
"id": "2",
"workId": "abc",
"type": "ebook"
},
{
"id": "3",
"workId": "abc",
"type": "ebook"
}
]

一旦折叠,结果中只会显示最上面的那个。因为其他两个被过滤掉了,所以分面计数看起来像
"type": ["book":1]

代替
"type": ["book":1, "ebook":1]

有没有办法使用折叠过滤器查询来获取 group.facet 计数?

最佳答案

我无法找到使用 Solr 或插件配置执行此操作的方法,因此我开发了一种变通方法,以在仍然使用 CollapsingQParserPlugin 的同时有效地创建组构面计数。

我通过复制我将要处理的字段并确保整个组的所有方面值都在每个文档中来做到这一点,如下所示:

"docs": [
{
"id": "1",
"workId": "abc",
"type": "book",
"facetType": [
"book",
"ebook"
]
},
{
"id": "2",
"workId": "abc",
"type": "ebook",
"facetType": [
"book",
"ebook"
]
},
{
"id": "3",
"workId": "abc",
"type": "ebook",
"facetType": [
"book",
"ebook"
]
}
]

当我要求 Solr 生成构面计数时,我使用了新字段:
facet.field=facetType

这确保所有方面值都被考虑在内,并且计数代表组。但是当我使用过滤器查询时,我又回到使用旧字段:
fq=type:book

这样就可以选择正确的文档来代表该组。

我知道这是一种肮脏、复杂的方式来让它工作,但它确实有效,这就是我所需要的。此外,它还需要能够在插入 Solr 之前查询您的文档,这需要进行一些开发。如果有人有更简单的解决方案,我仍然很乐意听到。

关于solr4 - Solr CollapsingQParserPlugin with group.facet=on style facet counts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24459372/

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