Does nested query with operator honor the operator or does it always display some default behavior

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Does nested query with operator honor the operator or does it always display some default behavior

Ramdev Wudali
Hi :
   I have the following query :
{
  "query": {
    "bool": {
      "must": {
        "nested": {
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "NESTED_FIELD.v": {
                      "query": [ "AAPL.OQ", "GOOGL.OQ"],
                      "operator": "and"
                      
                    }
                  }
                },
                {
                  "range": {
                    "NESTED_FIELD.s": {
                      "from": 0.6,
                      "to": null,
                      "include_lower": true,
                      "include_upper": true
                    }
                  }
                }
              ]
            }
          },
          "path": "NESTED_FIELD"
        }
      }
    }
  },
  "filter": {
    "bool": {
      "must": [
        {
          "range": {
            "DOC_DATE.v": {
              "from": "2014-08-19T20:00:00.000-04:00",
              "to": "2014-10-18T23:59:59.999Z",
              "include_lower": true,
              "include_upper": true
            }
          }
        }
      ]
    }
  }
}

The behavior I expect is the following :

 In the documents that are returned, they should contain both values for the NESTED_FIELD.v (AAPL.OQ and GOOG.OQ) that satisfy the condition where their corresponding NESTED_FIELD.v range also is satisfied. 

The behavior I see :
   the documents returned contain either one of the values (as in its got AAPL.OQ (OR) GOOG.OQ (OR) Both.  

I want documents that only have both the values. So the "operator" :"and" (and its variant "operator":"AND") does not seem to have any effect.
any pointers suggestions regarding this is much appreciated. I am using the JAVA API to construct my queries. (but I do not think it should matter)

Thanks

Ramdev


--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/c07cc19b-9ff1-4074-b79c-1861afb7e866%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Does nested query with operator honor the operator or does it always display some default behavior

Ivan Brusic
I have never seen the array syntax with the match query, so I am not sure what the behavior should be. Since your search terms are not analyzed in your example, a terms query with a minimum match of 100% should work. If not, perhaps creating a single search term of your existing terms?

-- 
Ivan

On Tue, Nov 18, 2014 at 10:23 AM, Ramdev Wudali <[hidden email]> wrote:
Hi :
   I have the following query :
{
  "query": {
    "bool": {
      "must": {
        "nested": {
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "NESTED_FIELD.v": {
                      "query": [ "AAPL.OQ", "GOOGL.OQ"],
                      "operator": "and"
                      
                    }
                  }
                },
                {
                  "range": {
                    "NESTED_FIELD.s": {
                      "from": 0.6,
                      "to": null,
                      "include_lower": true,
                      "include_upper": true
                    }
                  }
                }
              ]
            }
          },
          "path": "NESTED_FIELD"
        }
      }
    }
  },
  "filter": {
    "bool": {
      "must": [
        {
          "range": {
            "DOC_DATE.v": {
              "from": "2014-08-19T20:00:00.000-04:00",
              "to": "2014-10-18T23:59:59.999Z",
              "include_lower": true,
              "include_upper": true
            }
          }
        }
      ]
    }
  }
}

The behavior I expect is the following :

 In the documents that are returned, they should contain both values for the NESTED_FIELD.v (AAPL.OQ and GOOG.OQ) that satisfy the condition where their corresponding NESTED_FIELD.v range also is satisfied. 

The behavior I see :
   the documents returned contain either one of the values (as in its got AAPL.OQ (OR) GOOG.OQ (OR) Both.  

I want documents that only have both the values. So the "operator" :"and" (and its variant "operator":"AND") does not seem to have any effect.
any pointers suggestions regarding this is much appreciated. I am using the JAVA API to construct my queries. (but I do not think it should matter)

Thanks

Ramdev


--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/c07cc19b-9ff1-4074-b79c-1861afb7e866%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/CALY%3DcQDwgN1Ja2EBjyp2_eZs29h6cb1iZ55CCU0DRjXiEzY5%3Dg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Does nested query with operator honor the operator or does it always display some default behavior

Ramdev Wudali
The fields (I am searching against) are analyzed, by the default analyzer. 
The query as you I noted in my question was generated by using the JAVA API, So the array syntax is generated by the API's interpretation.  That said, I ran a few more experiments. If the field were not analyzed (unlike my non experiment  case),  The query function works and returns the right documents. (meaning where both the values exist) in the returned documents.  But if they are analyzed, the  operator is not honored.

So now my question is,  why would not analyzed fields cause the operator to be honored ?
and Does the operator field within a nested query depend on if the field in the nested field is actually analyzed or not. ?

Ramdev



On Tuesday, 18 November 2014 14:45:53 UTC-6, Ivan Brusic wrote:
I have never seen the array syntax with the match query, so I am not sure what the behavior should be. Since your search terms are not analyzed in your example, a terms query with a minimum match of 100% should work. If not, perhaps creating a single search term of your existing terms?

-- 
Ivan

On Tue, Nov 18, 2014 at 10:23 AM, Ramdev Wudali <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="eZj-TxYTkFQJ" onmousedown="this.href='javascript:';return true;" onclick="this.href='javascript:';return true;">agas...@...> wrote:
Hi :
   I have the following query :
{
  "query": {
    "bool": {
      "must": {
        "nested": {
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "NESTED_FIELD.v": {
                      "query": [ "AAPL.OQ", "GOOGL.OQ"],
                      "operator": "and"
                      
                    }
                  }
                },
                {
                  "range": {
                    "NESTED_FIELD.s": {
                      "from": 0.6,
                      "to": null,
                      "include_lower": true,
                      "include_upper": true
                    }
                  }
                }
              ]
            }
          },
          "path": "NESTED_FIELD"
        }
      }
    }
  },
  "filter": {
    "bool": {
      "must": [
        {
          "range": {
            "DOC_DATE.v": {
              "from": "2014-08-19T20:00:00.000-04:00",
              "to": "2014-10-18T23:59:59.999Z",
              "include_lower": true,
              "include_upper": true
            }
          }
        }
      ]
    }
  }
}

The behavior I expect is the following :

 In the documents that are returned, they should contain both values for the NESTED_FIELD.v (AAPL.OQ and GOOG.OQ) that satisfy the condition where their corresponding NESTED_FIELD.v range also is satisfied. 

The behavior I see :
   the documents returned contain either one of the values (as in its got AAPL.OQ (OR) GOOG.OQ (OR) Both.  

I want documents that only have both the values. So the "operator" :"and" (and its variant "operator":"AND") does not seem to have any effect.
any pointers suggestions regarding this is much appreciated. I am using the JAVA API to construct my queries. (but I do not think it should matter)

Thanks

Ramdev


--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to <a href="javascript:" target="_blank" gdf-obfuscated-mailto="eZj-TxYTkFQJ" onmousedown="this.href='javascript:';return true;" onclick="this.href='javascript:';return true;">elasticsearc...@googlegroups.com.
To view this discussion on the web visit <a href="https://groups.google.com/d/msgid/elasticsearch/c07cc19b-9ff1-4074-b79c-1861afb7e866%40googlegroups.com?utm_medium=email&amp;utm_source=footer" target="_blank" onmousedown="this.href='https://groups.google.com/d/msgid/elasticsearch/c07cc19b-9ff1-4074-b79c-1861afb7e866%40googlegroups.com?utm_medium\75email\46utm_source\75footer';return true;" onclick="this.href='https://groups.google.com/d/msgid/elasticsearch/c07cc19b-9ff1-4074-b79c-1861afb7e866%40googlegroups.com?utm_medium\75email\46utm_source\75footer';return true;">https://groups.google.com/d/msgid/elasticsearch/c07cc19b-9ff1-4074-b79c-1861afb7e866%40googlegroups.com.
For more options, visit <a href="https://groups.google.com/d/optout" target="_blank" onmousedown="this.href='https://groups.google.com/d/optout';return true;" onclick="this.href='https://groups.google.com/d/optout';return true;">https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/20a3c1d1-e2cc-44a5-affe-5b30777bcc8d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Does nested query with operator honor the operator or does it always display some default behavior

Ivan Brusic
As mentioned before, that syntax seems strange to me. I have never seen an array used with a match query. I wonder what the resulting Lucene query is. I think that analyzed/non-analyzed just might be a red herring. What does the explanation output say?

-- 
Ivan

On Wed, Nov 19, 2014 at 10:24 AM, Ramdev Wudali <[hidden email]> wrote:
The fields (I am searching against) are analyzed, by the default analyzer. 
The query as you I noted in my question was generated by using the JAVA API, So the array syntax is generated by the API's interpretation.  That said, I ran a few more experiments. If the field were not analyzed (unlike my non experiment  case),  The query function works and returns the right documents. (meaning where both the values exist) in the returned documents.  But if they are analyzed, the  operator is not honored.

So now my question is,  why would not analyzed fields cause the operator to be honored ?
and Does the operator field within a nested query depend on if the field in the nested field is actually analyzed or not. ?

Ramdev



On Tuesday, 18 November 2014 14:45:53 UTC-6, Ivan Brusic wrote:
I have never seen the array syntax with the match query, so I am not sure what the behavior should be. Since your search terms are not analyzed in your example, a terms query with a minimum match of 100% should work. If not, perhaps creating a single search term of your existing terms?

-- 
Ivan

On Tue, Nov 18, 2014 at 10:23 AM, Ramdev Wudali <[hidden email]> wrote:
Hi :
   I have the following query :
{
  "query": {
    "bool": {
      "must": {
        "nested": {
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "NESTED_FIELD.v": {
                      "query": [ "AAPL.OQ", "GOOGL.OQ"],
                      "operator": "and"
                      
                    }
                  }
                },
                {
                  "range": {
                    "NESTED_FIELD.s": {
                      "from": 0.6,
                      "to": null,
                      "include_lower": true,
                      "include_upper": true
                    }
                  }
                }
              ]
            }
          },
          "path": "NESTED_FIELD"
        }
      }
    }
  },
  "filter": {
    "bool": {
      "must": [
        {
          "range": {
            "DOC_DATE.v": {
              "from": "2014-08-19T20:00:00.000-04:00",
              "to": "2014-10-18T23:59:59.999Z",
              "include_lower": true,
              "include_upper": true
            }
          }
        }
      ]
    }
  }
}

The behavior I expect is the following :

 In the documents that are returned, they should contain both values for the NESTED_FIELD.v (AAPL.OQ and GOOG.OQ) that satisfy the condition where their corresponding NESTED_FIELD.v range also is satisfied. 

The behavior I see :
   the documents returned contain either one of the values (as in its got AAPL.OQ (OR) GOOG.OQ (OR) Both.  

I want documents that only have both the values. So the "operator" :"and" (and its variant "operator":"AND") does not seem to have any effect.
any pointers suggestions regarding this is much appreciated. I am using the JAVA API to construct my queries. (but I do not think it should matter)

Thanks

Ramdev


--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearc...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/c07cc19b-9ff1-4074-b79c-1861afb7e866%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/20a3c1d1-e2cc-44a5-affe-5b30777bcc8d%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/CALY%3DcQANjUjEjCr%3D0jwf-UB5mEVmFUF8YsJUgVbpLQcEhFpgkQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Does nested query with operator honor the operator or does it always display some default behavior

Ramdev Wudali
Hi Ivan: 
I tried using the _explain API (end point to get an explanation, it returned this :
{
   
"_index": "news",
   
"_type": "swift",
   
"_id": "_explain",
   
"_version": 5,
   
"created": false
}

I tried adding "explain":true as part of my query which resulted in this :
            "_explanation": {
               
"value": 10.384945,
               
"description": "Score based on child doc range from 75103316 to 75103366"
}


That said,  If you think the syntax is not familiar, How do you suggest the query be created ? ( of course, I could split the query into a boolean query with two MUST nested conditions) which does result in the documents I am looking for). 
However, If I have a list of more than 2 values to be seated for, the query becomes unseemly. The JAVA API does seem to allow for list of values to be passed in.. here is a code snippet for who I am using the JAVA API :

 
              qb = QueryBuilders.nestedQuery(fieldName, QueryBuilders.boolQuery().
                                                       must
(QueryBuilders.matchQuery(fieldName + ".v", values).
                                                               
operator(MatchQueryBuilder.Operator.AND)).
                                                                               must
(QueryBuilders
                                                                                           
.rangeQuery(fieldName + ".s")
                                                                                           
.gte(0.6))

Where values is a List of values

please let me know if I am using the API incorrectly. 


Thanks

Ramdev



On Wednesday, 19 November 2014 14:13:41 UTC-6, Ivan Brusic wrote:
As mentioned before, that syntax seems strange to me. I have never seen an array used with a match query. I wonder what the resulting Lucene query is. I think that analyzed/non-analyzed just might be a red herring. What does the explanation output say?

-- 
Ivan

On Wed, Nov 19, 2014 at 10:24 AM, Ramdev Wudali <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="Zhj8gcJVNZUJ" onmousedown="this.href='javascript:';return true;" onclick="this.href='javascript:';return true;">agas...@...> wrote:
The fields (I am searching against) are analyzed, by the default analyzer. 
The query as you I noted in my question was generated by using the JAVA API, So the array syntax is generated by the API's interpretation.  That said, I ran a few more experiments. If the field were not analyzed (unlike my non experiment  case),  The query function works and returns the right documents. (meaning where both the values exist) in the returned documents.  But if they are analyzed, the  operator is not honored.

So now my question is,  why would not analyzed fields cause the operator to be honored ?
and Does the operator field within a nested query depend on if the field in the nested field is actually analyzed or not. ?

Ramdev



On Tuesday, 18 November 2014 14:45:53 UTC-6, Ivan Brusic wrote:
I have never seen the array syntax with the match query, so I am not sure what the behavior should be. Since your search terms are not analyzed in your example, a terms query with a minimum match of 100% should work. If not, perhaps creating a single search term of your existing terms?

-- 
Ivan

On Tue, Nov 18, 2014 at 10:23 AM, Ramdev Wudali <[hidden email]> wrote:
Hi :
   I have the following query :
{
  "query": {
    "bool": {
      "must": {
        "nested": {
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "NESTED_FIELD.v": {
                      "query": [ "AAPL.OQ", "GOOGL.OQ"],
                      "operator": "and"
                      
                    }
                  }
                },
                {
                  "range": {
                    "NESTED_FIELD.s": {
                      "from": 0.6,
                      "to": null,
                      "include_lower": true,
                      "include_upper": true
                    }
                  }
                }
              ]
            }
          },
          "path": "NESTED_FIELD"
        }
      }
    }
  },
  "filter": {
    "bool": {
      "must": [
        {
          "range": {
            "DOC_DATE.v": {
              "from": "2014-08-19T20:00:00.000-04:00",
              "to": "2014-10-18T23:59:59.999Z",
              "include_lower": true,
              "include_upper": true
            }
          }
        }
      ]
    }
  }
}

The behavior I expect is the following :

 In the documents that are returned, they should contain both values for the NESTED_FIELD.v (AAPL.OQ and GOOG.OQ) that satisfy the condition where their corresponding NESTED_FIELD.v range also is satisfied. 

The behavior I see :
   the documents returned contain either one of the values (as in its got AAPL.OQ (OR) GOOG.OQ (OR) Both.  

I want documents that only have both the values. So the "operator" :"and" (and its variant "operator":"AND") does not seem to have any effect.
any pointers suggestions regarding this is much appreciated. I am using the JAVA API to construct my queries. (but I do not think it should matter)

Thanks

Ramdev


--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearc...@googlegroups.com.
To view this discussion on the web visit <a href="https://groups.google.com/d/msgid/elasticsearch/c07cc19b-9ff1-4074-b79c-1861afb7e866%40googlegroups.com?utm_medium=email&amp;utm_source=footer" target="_blank" onmousedown="this.href='https://groups.google.com/d/msgid/elasticsearch/c07cc19b-9ff1-4074-b79c-1861afb7e866%40googlegroups.com?utm_medium\75email\46utm_source\75footer';return true;" onclick="this.href='https://groups.google.com/d/msgid/elasticsearch/c07cc19b-9ff1-4074-b79c-1861afb7e866%40googlegroups.com?utm_medium\75email\46utm_source\75footer';return true;">https://groups.google.com/d/msgid/elasticsearch/c07cc19b-9ff1-4074-b79c-1861afb7e866%40googlegroups.com.
For more options, visit <a href="https://groups.google.com/d/optout" target="_blank" onmousedown="this.href='https://groups.google.com/d/optout';return true;" onclick="this.href='https://groups.google.com/d/optout';return true;">https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to <a href="javascript:" target="_blank" gdf-obfuscated-mailto="Zhj8gcJVNZUJ" onmousedown="this.href='javascript:';return true;" onclick="this.href='javascript:';return true;">elasticsearc...@googlegroups.com.
To view this discussion on the web visit <a href="https://groups.google.com/d/msgid/elasticsearch/20a3c1d1-e2cc-44a5-affe-5b30777bcc8d%40googlegroups.com?utm_medium=email&amp;utm_source=footer" target="_blank" onmousedown="this.href='https://groups.google.com/d/msgid/elasticsearch/20a3c1d1-e2cc-44a5-affe-5b30777bcc8d%40googlegroups.com?utm_medium\75email\46utm_source\75footer';return true;" onclick="this.href='https://groups.google.com/d/msgid/elasticsearch/20a3c1d1-e2cc-44a5-affe-5b30777bcc8d%40googlegroups.com?utm_medium\75email\46utm_source\75footer';return true;">https://groups.google.com/d/msgid/elasticsearch/20a3c1d1-e2cc-44a5-affe-5b30777bcc8d%40googlegroups.com.

For more options, visit <a href="https://groups.google.com/d/optout" target="_blank" onmousedown="this.href='https://groups.google.com/d/optout';return true;" onclick="this.href='https://groups.google.com/d/optout';return true;">https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/41fa2f25-a36d-49e6-b114-ce3c0f48d488%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.