RoaringBitMap contains() 数组?

问题描述 投票:0回答:1

我正在使用自定义 Elasticsearch 插件在 Java 中尝试 RoaringBitMaps,并且

rBitmap.contains(1111)
效果非常好。

现在,如果我这样做

rBitmap.contains([1111,2222,3333])
,将无法按预期工作。

我期望的是

OR
,但事实并非如此。

将 RoaringBitMap 与数组进行比较的最有效方法是什么?我缺少什么方法吗?

我将尝试一个 forloop,当它发现包含重合时停止,并将数组转换为 RoaringMap,然后运行基数函数。

我使用Java(这是一个自定义的Elasticsearch插件),试图找到类似于pyroaring的东西isdisjoint

这是插件中实现RoaringBitmap的部分

            @Override
            public LeafFactory newFactory(
                    Map<String, Object> params,
                    SearchLookup lookup
                    ) {
                final byte[] decodedTerms = Base64.getDecoder().decode(params.get("terms").toString());
                final ByteBuffer buffer = ByteBuffer.wrap(decodedTerms);
                RoaringBitmap rBitmap = new RoaringBitmap();
                try {
                    rBitmap.deserialize(buffer);
                }
                catch (IOException e) {
                    // Do something here
                }
                return new FastFilterLeafFactory(params, lookup, rBitmap);
            }
        }
                    @Override
                    public boolean execute() {
                        final int docVal;
                        try {
                            docVal = Math.toIntExact(docValues.nextValue());
                        } catch (IOException e) {
                            throw ExceptionsHelper.convertToElastic(e);
                        }

                        if (exclude && rBitmap.contains(docVal)) {
                            return false;
                        }
                        else return !include || rBitmap.contains(docVal);
                    }

完整代码在这里:https://github.com/lsena/fastfilter-elasticsearch-plugin/blob/master/src/main/java/org/elasticsearch/lsena/fastfilter/FastFilterPlugin.java

谢谢

bitmap roaring-bitset
1个回答
0
投票

从你的代码 -

rBitmap.contains([1111,2222,3333])

这将检查输入数组是否是

rBitMap
的子集,而这不是您要寻找的。

如果您正在寻找一种方法来检查两个咆哮位图是否相交,您可以使用

intersects
定义的方法here -

public static boolean intersects(final RoaringBitmap x1, final RoaringBitmap x2)

如果您正在寻找一个使用 RoaringBitmap 实现来检查两个大整数列表(一个存储在 elasticsearch 中,另一个作为查询中的过滤器参数传递给 elasticsearch)是否相交的弹性搜索插件,你可以使用这个插件 - https://github.com/tata1mg/fastmatch-elasticsearch-plugin

© www.soinside.com 2019 - 2024. All rights reserved.