Я хочу выполнить операцию поиска в Elasticsearch, используя RelNode
объекты, а не традиционный метод SQL-запроса.
Я пытался создать RelNode
объекты, предоставляя проекции и фильтры, но это не сработало, говоряполя ввода не найдены.
SchemaPlus postschema = con.getRootSchema().getSubSchema("twitter2");
FrameworkConfig postConfig = Frameworks.newConfigBuilder()
.defaultSchema(postschema)
.build();
RelBuilder postBuilder = RelBuilder.create(postConfig);
RelNode relSelect = postBuilder.scan("user").project(testBuilder.scan("user").field("name)).build();
Я использовал следующую схему:
+ "{
"
+ " version: '1.0',
"
+ " defaultSchema: 'BASEJDBC',
"
+ " schemas: [
"
+ " {
"
+ " type: 'custom',
"
+ " name: 'twitter2',
"
+ " factory: '" + "org.apache.calcite.adapter.elasticsearch.ElasticsearchSchemaFactory" + "',
"
+ " operand: {
"
+ " "coordinates": " + " "{'localhost': 9200}",
"
+ " "userConfig": " + " "{'admin': 'admin'}",
"
+ " "index": "twitter2"
"
+ " }
"
+ " },
"
Я могу выбрать правильный набор результатов, используя следующие объекты RexNode в фильтре:
final RexNode condition1 =
rexbuilder.makeCall(SqlStdOperatorTable.EQUALS,
rexbuilder.makeCall(SqlStdOperatorTable.ITEM,rexbuilder.makeInputRef(relDataTypeFactory.createSqlType(SqlTypeName.ANY), 0),
rexbuilder.makeLiteral("_id"))
,
rexbuilder.makeLiteral("ss")
);
RelNode node = postBuilder.scan("user")
.filter(condition1)
//.project()
.build();
Я все еще не могу создавать проекции объектов RelNode.Это стандартный способ создания фильтрующих объектов RelNode ???
Не могли бы вы предоставить подробности при просмотре и как использовать его для построения запросов ??