[ 
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)

Reply via email to