簡體   English   中英

ElasticSearch RANGE 查詢未按預期工作

[英]ElasticSearch RANGE query doesn't work as expected

我正在嘗試使用 ES 7.7 Java API 對嵌套文檔運行 RANGE 查詢。我注意到它沒有按預期過濾數據。 當我將調試語句放在 ES 運行的實際查詢上時,我無法主要針對范圍查詢的“to”部分獲得適當的結果。 我注意到 GT 或 GTE 在 LT 上工作正常,而 LTE 也沒有按預期工作。

下面是這個范圍查詢的簡單 Java 代碼。 請注意,嵌套文檔中的權重被定義為浮點數,如""weight": {"type": "float"},"

query.must(QueryBuilders.nestedQuery(fields[0], QueryBuilders.rangeQuery(c.getField()).from(c.getValues().get(0)).to(c.getValues().get(1)),ScoreMode.None).innerHit(innerHitBuilder));

以下是 LT 的 Java API 代碼示例。

query.must(QueryBuilders.nestedQuery(fields[0], QueryBuilders.rangeQuery(c.getField()).lt(c.getValue()), ScoreMode.None).innerHit(innerHitBuilder));

下面是ES對上面語句RANGE查詢語句實際運行的查詢。

{
   "from":0,
   "size":50,
   "query":{
      "bool":{
         "must":[
            {
               "match_phrase":{
                  "fundsponsor":{
                     "query":"vanguard group inc",
                     "slop":0,
                     "zero_terms_query":"NONE",
                     "boost":1.0
                  }
               }
            },
            {
               "nested":{
                  "query":{
                     "match_phrase":{
                        "holdings.componentticker":{
                           "query":"baba",
                           "slop":0,
                           "zero_terms_query":"NONE",
                           "boost":1.0
                        }
                     }
                  },
                  "path":"holdings",
                  "ignore_unmapped":false,
                  "score_mode":"none",
                  "boost":1.0,
                  "inner_hits":{
                     "name":"holdings.componenttickerbaba",
                     "ignore_unmapped":false,
                     "from":0,
                     "size":100,
                     "version":false,
                     "seq_no_primary_term":false,
                     "explain":false,
                     "track_scores":false
                  }
               }
            },
            {
               "nested":{
                  "query":{
                     "range":{
                        "holdings.weight":{
                           "from":1.0,
                           "to":2.0,
                           "include_lower":true,
                           "include_upper":true,
                           "boost":1.0
                        }
                     }
                  },
                  "path":"holdings",
                  "ignore_unmapped":false,
                  "score_mode":"none",
                  "boost":1.0,
                  "inner_hits":{
                     "name":"holdings.weightnull",
                     "ignore_unmapped":false,
                     "from":0,
                     "size":100,
                     "version":false,
                     "seq_no_primary_term":false,
                     "explain":false,
                     "track_scores":false
                  }
               }
            }
         ],
         "adjust_pure_negative":true,
         "boost":1.0
      }
   },
   "_source":{
      "includes":[
         "fundsymbol",
         "fundsponsor",
         "fundname",
         "componentcount",
         "holdings.componentticker",
         "holdings.weight"
      ],
      "excludes":[



      ]
   }
}

請注意下面的部分,這是這里的罪魁禍首。 其他一切都按預期工作。 正如我上面提到的,“from”按預期工作,並按預期轉換為 GTE,但“to”不起作用,出於某種奇怪的原因,“LT”或“LTE”也不起作用。

               "nested":{
                  "query":{
                     "range":{
                        "holdings.weight":{
                           "from":1.0,
                           "to":2.0,
                           "include_lower":true,
                           "include_upper":true,
                           "boost":1.0
                        }
                     }
                  },

首先, fromto不是范圍查詢屬性。 范圍查詢需要ltelegtege 查詢應如下所示:

{
    "query": {
        "nested": {
            "path": "holdings",
            "query": {
                "range": {
                    "holdings.weight": {
                        "gte": 1,
                        "lte": 2
                    }
                }
            }
        }
    }
}

其次,檢查您的索引映射並確保holdings被映射為nested並且weight被映射為float

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM