Elasticsearch 對索引中的兩個字段比較大小進行篩選


如:索引中有兩個 stock 跟 lowStock;現在需要把stock小於等於lowStock的數據篩選出來;可以利用 script來實現

kibana  請求如下:

get  product_search_index/_search
{
  "query":{
    "bool": {"must": [
      {"script": {
        "script":{
          "source": " return doc['stock'].value<=doc['lowStock'].value",
          "lang": "painless"
        }
      }}
    ]}
  }
}

java代碼如下:

BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
Script script = new Script("doc['stock'].value<=doc['lowStock'].value");
boolQueryBuilder.must(QueryBuilders.scriptQuery(script));
NativeSearchQueryBuilder searchQueryBuilder
= new NativeSearchQueryBuilder();
searchQueryBuilder.withFilter(boolQueryBuilder); SearchHits
<XXXDTO> search = es.search(searchQueryBuilder.build(), XXXDTO.class);

如果 文檔中某一個字段可能不存在可以改寫如下:

get  product_search_index/_search
{
  "query":{
    "bool": {"must": [
      {"script": {
        "script":{
          "source": " long stock=doc['stock'].value;long lowStock=0; if(doc.containsKey('lowStock')&&doc['lowStock'].size()!=0){ lowStock=doc['lowStock'].value; }   return stock<=lowStock",
          "lang": "painless"
        }
      }}
    ]}
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM