ipfs-search/ipfs-search-api

Better availability scoring

Opened this issue · 0 comments

{
	"fields": [
		"metadata.title",
		"first-seen",
		"last-seen"
	],
	"query": {
		"bool": {
			"must": {
				"query_string": {
					"query": "banner"
				}
			},
			"should": {
				"distance_feature": {
					"field": "last-seen",
					"pivot": "30d",
					"origin": "now/h",
					"boost": 3.0
				}
			}
		}
	},
	"script_fields": {
		"availability": {
			"script": {
				"lang": "expression",
				"source": "doc['last-seen'].empty ? default : exp((ln(decay)/(scale*(doc['last-seen']-doc['first-seen'] + scale_offset)))*(now - doc['first-seen'].value))",
				"params": {
					"default": 0.0,
					"scale_offset": 21600000,
					"now": 1625393744150,
					"scale": 0.4,
					"decay": 0.9
				}
			}
		}
	},
	"rescore": {
		"window_size": 50,
		"query": {
			"rescore_query": {
				"script_score": {
					"query": {
						"match_all": {}
					},
					"script": {
						"lang": "expression",
						"source": "doc['last-seen'].empty ? default : exp((ln(decay)/(scale*(doc['last-seen']-doc['first-seen'] + scale_offset)))*(now - doc['first-seen'].value))",
						"params": {
							"default": 0.0,
							"scale_offset": 21600000,
							"now": 1625393744150,
							"scale": 0.4,
							"decay": 0.9
						}
					}
				}
			},
			"query_weight": 1.0,
			"rescore_query_weight": 15
		}
	}
}