你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
doom
赞同来自: haoshuai
PUT product2 { "settings": { "number_of_replicas": 0, "number_of_shards": 1 }, "mappings": { "properties": { "name":{ "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "product_date":{ "type": "date", "format": ["yyyy-MM-dd"] }, "guarantee":{ "type": "integer" } } } } 插入数据插入插入数据数据 PUT product2/_doc/_bulk {"index":{"_id":1}} {"name":"饼干","product_date":"2019-01-11","guarantee":180} {"index":{"_id":2}} {"name":"月饼","product_date":"2019-01-11","guarantee":200} {"index":{"_id":3}} {"name":"牛奶","product_date":"2019-01-11","guarantee":280} {"index":{"_id":4}} {"name":"鸡蛋","product_date":"2019-02-11","guarantee":180} {"index":{"_id":5}} {"name":"小麦","product_date":"2019-03-11","guarantee":180} {"index":{"_id":6}} {"name":"大米","product_date":"2019-04-11","guarantee":180} {"index":{"_id":7}} {"name":"酱油","product_date":"2019-06-11","guarantee":180} 查询查询查询 GET product2/_search { "query": { "match_all": {} }, "sort": { "_script": { "script": { "lang": "painless", "source": "((new Date()).getTime() - doc['product_date'].value.millis)/86400000.0 - doc['guarantee'].value" }, "type": "number", "order": "asc" } } }
trycatchfinal
caizhongao
要回复问题请先登录或注册
90后
3 个回复
doom
赞同来自: haoshuai
大概的意思: 现在的时间 - 生成日期来获取 产品存在天数,再减去过期时间的天数,就可以获取产是否过期的数据;>0就为过期;
<=0,
trycatchfinal
赞同来自: haoshuai
使用script,每次都要进行计算,数据量大的话,会有性能问题。
根据具体查询,选择合适的索引类型。
如果需要进行排序,可以创建一个integer类型的field,过期可以设置为-1;
如果查询所有过期的查询,可以再建立一个boolean类型的field,使用term查询,虽然查询“过期时间>0”也能实现,但是效率不如term查询。
--------------------------------------------------
还有一种办法:
通过“生产日期”和“保质期”是可以计算出“过期日期”的。
在索引数据时,同时索引“过期日期”字段。
对“过期日期”进行倒序,就可以将过期的产品靠后排序了。
caizhongao
赞同来自: haoshuai