[
https://issues.apache.org/jira/browse/CALCITE-4232?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Shlok Srivastava updated CALCITE-4232:
--------------------------------------
Description:
IN clause is required in multiple queries to fetch documents that contain more
than one *exact terms* in a provided field.
SQL Query
{code:java}
name IN ("kimchy", "james"){code}
RelNode for same-
{code:java}
rexb.makeCall(SqlStdOperatorTable.IN, builder.field("name"),
rexb.makeLiteral("kimchy"), rexb.makeLiteral("james")){code}
*Problem* : Calcite for above RelNode throws
_java.sql.SQLException : Error while preparing statement [null]_
_Suppressed: java.lang.UnsupportedOperationException: Can't handle partial
QueryExpression:
org.apache.calcite.adapter.elasticsearch.PredicateAnalyzer$CompoundQueryExpression@3e782f91_
_at
org.apache.calcite.adapter.elasticsearch.PredicateAnalyzer.analyze(PredicateAnalyzer.java:114)_
_at
org.apache.calcite.adapter.elasticsearch.ElasticsearchFilter$PredicateAnalyzerTranslator.translateMatch(ElasticsearchFilter.java:99)_
_at
org.apache.calcite.adapter.elasticsearch.ElasticsearchFilter.implement(ElasticsearchFilter.java:64)_
_at
org.apache.calcite.adapter.elasticsearch.ElasticsearchRel$Implementor.visitChild(ElasticsearchRel.java:140)_
_at
org.apache.calcite.adapter.elasticsearch.ElasticsearchProject.implement(ElasticsearchProject.java:59)_
Expected Elasticsearch Query -
{code:java}
GET /_search
{
"query": {
"terms": {
"name": [
"kimchy",
"james"
]
}
}
}
{code}
*Solution*: Extend _IN SQLTableOperator_ support in elasticsearch adapters to
use Terms Query Builder which is already present in elasticsearch adapters.
was:
IN clause is required in multiple queries to fetch documents that contain more
than one *exact terms* in a provided field.
SQL Query
{code:java}
name IN ("kimchy", "james"){code}
RelNode for same-
{code:java}
rexb.makeCall(SqlStdOperatorTable.IN, builder.field("name"),
rexb.makeLiteral("kimchy"), rexb.makeLiteral("james")){code}
Expected Elasticsearch Query -
{code:java}
GET /_search
{"query": {"terms":
{"name": [ "kimchy", "james" ],"boost": 1.0}
}}
{code}
*Problem* : Calcite for above RelNode throws _java.sql.SQLException : Error
while preparing statement caused by UnsupportedOperationException_
*Solution*: Extend _IN SQLTableOperator_ support in elasticsearch adapters to
build above expected Elasticsearch query.
> Elasticsearch IN Query is not supported
> ----------------------------------------
>
> Key: CALCITE-4232
> URL: https://issues.apache.org/jira/browse/CALCITE-4232
> Project: Calcite
> Issue Type: Improvement
> Components: elasticsearch-adapter
> Reporter: Shlok Srivastava
> Priority: Major
> Labels: IN, calcite, elasticsearch, pull-request-available, query
> Time Spent: 1.5h
> Remaining Estimate: 0h
>
> IN clause is required in multiple queries to fetch documents that contain
> more than one *exact terms* in a provided field.
> SQL Query
> {code:java}
> name IN ("kimchy", "james"){code}
> RelNode for same-
> {code:java}
> rexb.makeCall(SqlStdOperatorTable.IN, builder.field("name"),
> rexb.makeLiteral("kimchy"), rexb.makeLiteral("james")){code}
>
> *Problem* : Calcite for above RelNode throws
> _java.sql.SQLException : Error while preparing statement [null]_
> _Suppressed: java.lang.UnsupportedOperationException: Can't handle partial
> QueryExpression:
> org.apache.calcite.adapter.elasticsearch.PredicateAnalyzer$CompoundQueryExpression@3e782f91_
> _at
> org.apache.calcite.adapter.elasticsearch.PredicateAnalyzer.analyze(PredicateAnalyzer.java:114)_
> _at
> org.apache.calcite.adapter.elasticsearch.ElasticsearchFilter$PredicateAnalyzerTranslator.translateMatch(ElasticsearchFilter.java:99)_
> _at
> org.apache.calcite.adapter.elasticsearch.ElasticsearchFilter.implement(ElasticsearchFilter.java:64)_
> _at
> org.apache.calcite.adapter.elasticsearch.ElasticsearchRel$Implementor.visitChild(ElasticsearchRel.java:140)_
> _at
> org.apache.calcite.adapter.elasticsearch.ElasticsearchProject.implement(ElasticsearchProject.java:59)_
> Expected Elasticsearch Query -
> {code:java}
> GET /_search
> {
> "query": {
> "terms": {
> "name": [
> "kimchy",
> "james"
> ]
> }
> }
> }
> {code}
> *Solution*: Extend _IN SQLTableOperator_ support in elasticsearch adapters to
> use Terms Query Builder which is already present in elasticsearch adapters.
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)