我希望能够运行如下查询:
select A.*
from A
join B
on match(A.geom,B.wkt) using within;
但我得到:
ERROR: UnhandledServerException: java.lang.IllegalArgumentException: queryTerm must be a literal
示例架构:
create table if not exists A (
id integer,
geom geo_shape
);
create table if not exists B (
id integer,
wkt string index off
);
尝试的原因wkt string
是由于文档使用了 WKT literals。此外,由于我们的实际实现是可变数量的几何图形,我们可能会针对这些几何图形进行连接并且geo_shape
不能存在于对象中,因此我们希望 WKT 可以与连接一起使用。
更新 1(根据增强 Jacob 的回答)尝试使用 geo_shape join geo_shape 与此模式:
create table if not exists B (
id integer,
wkt geo_shape
);
上面的查询产生了一个不同的错误:
SQLParseException: Couldn't create executionContexts from NodeOperations
... original-error: Can't handle Symbol io.crate.analyze.symbol.MatchPredicate@6666c921
而且,虽然错误并不理想,但我不希望它能够正常工作,因为文档状态:
笔记
一个 MATCH 谓词不能组合连接的两个关系的列。
更新 2使用 geo_shape join geo_shape,match
不起作用但within
可以工作,但是,作为“精确”查询,性能使其几乎无法使用,至少在我们的 2.4B 行中是这样。
select A.*
from A
join B
on within(B.wkt,A.geom);