You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Shlok Srivastava (Jira)" <ji...@apache.org> on 2020/10/16 10:35:00 UTC

[jira] [Commented] (CALCITE-4233) Elasticsearch Dismax API is not supported in calcite

    [ https://issues.apache.org/jira/browse/CALCITE-4233?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17215328#comment-17215328 ] 

Shlok Srivastava commented on CALCITE-4233:
-------------------------------------------

I have raised an initial PR for dismax API support. As dismax API will be wrapping the filter/query within its query node ({"query": {"dis_max": {) just like constant_score API, therefore I am still confused on how to use it. Will it be ok if we use dismax whenever an OR condition is present in the filter RelNode which can be governed from PredicateAnalysers??

Following logic can be used -

boolean disMax = condition.isA(SqlKind.OR);
Iterator operands = ((RexCall) condition).getOperands().iterator();
while (operands.hasNext() && !disMax) {
if (operands.next().isA(SqlKind.OR)) {
disMax = true;
break;
}
}
if (disMax) {
QueryBuilders.disMaxQueryBuilder(PredicateAnalyzer.analyze(condition)).writeJson(generator);
} else {
QueryBuilders.constantScoreQuery(PredicateAnalyzer.analyze(condition)).writeJson(generator);
}

> Elasticsearch Dismax API is not supported in calcite
> ----------------------------------------------------
>
>                 Key: CALCITE-4233
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4233
>             Project: Calcite
>          Issue Type: Improvement
>          Components: elasticsearch-adapter
>            Reporter: Shlok Srivastava
>            Priority: Major
>              Labels: QueryBuilder, calcite, dismax, elasticsearch
>
> Currently, Calcite use constant_score API to build all the queries. which do not fetch document based on relevance score from any matching clause which is supported by disMax API. It does not support dismax query builders - [https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-dis-max-query.html.]
>  
> Dismax query -
>  GET /_search{"query": {"dis_max": {"queries": [{ "term":
> { "title": "Quick pets" }
> },{ "term":
> { "body": "Quick pets" }
> }],"tie_breaker": 0.7}}}
>  
> Expected behavior - Queries with OR conditions should use disMax builders to fetch the best matching documents.
>   
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)