我有两个独立的索引-
1。产品
2。currency_rates
产品索引中的文档具有以下详细信息-
{
"prod_id" : 1,
"currency" : "USD",
"price" : 1
}
currency_rates索引中的文档具有以下详细信息-
{
"id" : 1,
"USD" : 1,
"SGD" : 0.72,
"MYR" : 0.24,
"INR" : 0.014,
"EUR" : 1.12
}
我希望在products index的price字段中实现排序,
但是由于product index中的每个文档可能有不同的货币,
我需要首先将所有货币转换为美元,
并在转换后的ResultSet上进行carryout排序。
[{
"prod_id": 1,
"currency": "USD",
"price": 1
}, {
"prod_id": 2,
"currency": "INR",
"price": 60
}]
{
"USD": 1,
"SGD": 0.72,
"MYR": 0.24,
"INR": 0.014,
"EUR": 1.12
}
以下是我的创建查询-
GET curency_rates/_search
{
"query": {
"match_all": {}
}
}
PUT /curency_rates/_doc/1
{
"id":1,
"USD" : 1,
"SGD" : 0.72,
"MYR" : 0.24,
"INR" : 0.014,
"EUR" : 1.12
}
PUT /products/_doc/1?pretty
{
"prod_id":1,
"currency": "USD",
"price": 1
}
PUT /products/_doc/2?pretty
{
"prod_id":2,
"currency": "INR",
"price": 60
}
GET products/_search
{
"query": {
"match_all": {}
}
}
我发现下面的用例与我的用例非常相似,
但我不明白他们是如何在运行时从另一个索引中获取转换因子,然后将其用于他们的复合查询-
弹性搜索排序预处理的
我提出了以下查询,
基于我引用的上面链接中的答案-
GET products/_search
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [{
"script_score": {
"script": {
"params": {
"USD": 1,
"SGD": 0.72,
"MYR": 0.24,
"INR": 0.014,
"EUR": 1.12
},
"source": "doc['price'].value * params.EUR"
}
}
}]
}
}
}
但我得到了错误的结果-
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4,
"relation" : "eq"
},
"max_score" : 67.2,
"hits" : [
{
"_index" : "products",
"_type" : "_doc",
"_id" : "2",
"_score" : 67.2,
"_source" : {
"prod_id" : 2,
"currency" : "INR",
"price" : 60
}
},
{
"_index" : "products",
"_type" : "_doc",
"_id" : "3",
"_score" : 2.24,
"_source" : {
"prod_id" : 3,
"currency" : "EUR",
"price" : 2
}
},
{
"_index" : "products",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.12,
"_source" : {
"prod_id" : 1,
"currency" : "USD",
"price" : 1
}
},
{
"_index" : "products",
"_type" : "_doc",
"_id" : "5",
"_score" : 1.12,
"_source" : {
"prod_id" : 5,
"currency" : "MYR",
"price" : 1
}
}
]
}
}
引用-
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-script-score
https://qbox.io/blog/tcorning-using-elasticsearch-scripts-part1
阅读这个例子。它们具有相同级别的“boost_mode”和“functions”字段。
尝试:
"functions": [
{
"script_score": {
"script": MathHere,
"params": {
...
}
}
}
],
"boost_mode": "replace"
希望这对你有帮助!:d
问题内容: 当我将Flashlight与Firebase结合使用并通过直接查询进行Elastic搜索时,它确实起作用: 询问 码 但是,当我希望不仅限于10条提示时,此操作将失败(无结果) 询问 码 我使用Flashlight示例中提供的选项,并为option添加零件: 为什么可以在https://github.com/firebase/flashlight/issues/29#issuecomm
我们大量使用cassandra wide rows来存储每个用户的时间序列,因为它们非常适合那个用例。假设我们有一个表: 如果时间戳上的冲突可能发生(相同的用户可以用相同的时间戳发出两个不同的事件)。假设我们对所有事件都有一个顺序(每个事件都有一个序列int),那么调整这个模式来解决这个问题的最佳方法是什么。 我将无法执行-cassandra不允许这样做。
我试图将查询与exclude查询一起使用,以便它匹配除要排除的术语之外的所有术语。我在一个基本的URI查询中找到了它,但不是常规的JSON查询。如何将此URI转换为JSON类型查询? 其中是不匹配的标记列表。 这是我目前所掌握的: 但是,当我这样做时,仍然包含在结果中。如何排除?
应查找下列文件: 我尝试了以下方法: 它应该(但不是)这样工作: bool通过或和部分组合 第一个按查询选择 筛选器使用bool组合by或must_not` 但其行为类似于与via AND子句组合。例如。当我删除“must”或“must_not”时,查询工作。 如何通过OR子句更改查询以将“must”与“must_not”组合? Elasticsearch版本为
我有一个用JPA和Spring Data DynamoDB建立的Spring项目。它工作正常。我可以通过分区键和排序键(称为DynamoDBHashKey和DynamoDBRangeKey)读取DynamoDB表中的项。 我的问题是,我的存储库的设置方式是使用查询和扫描操作来读取表,而不是使用获取项目操作,这应该会更高效。 这是我的实体: 这是我的存储库: 当我的表同时具有分区键和排序键时,如何配