gpt4 book ai didi

elasticsearch - 设置scaling_factor参数时出现奇怪的行为

转载 作者:行者123 更新时间:2023-12-03 01:25:27 25 4
gpt4 key购买 nike

我正在使用Elasticsearch 6.2.1,现在尝试了解scaling_factor参数设置为某个值时的工作方式。

根据文档的说明,字段的值乘以scaling_factor,然后在索引时间存储为long。当scaling_factor为100时,我期望值1.234将在内部存储为123,之后可以在索引中找到1.23。我现在看到的是值1.234不会失去它的精度,我可以从索引中获取它的原始形式:1.234。

此版本的Elasticsearch中的错误吗?如果没有人可以解释幕后情况?

更新

@Val的答案阐明了Elasticsearch的行为,但我想理解为什么尽管索引仅包含缩放值,但仍可以通过原始原始值查找文档。例如,在以下映射的情况下:

{
"mappings": {
"properties": {
"num": {
"type": "scaled_float",
"scaling_factor": 100
}
}
}
}

我可以索引文件
{
"num": 1.234
}

然后使用以下查询找到它:
{
"query": {
"match": {
"num": 1.234
}
}
}

我希望上面的查询不会找到任何内容,因为索引仅包含舍入值1.23。

最佳答案

如果您在源文档中看到1.234,这很正常,ES不会修改源文档本身中的任何内容。

给定此映射:

PUT scaling
{
"mappings": {
"properties": {
"num": {
"type": "scaled_float",
"scaling_factor": 100
}
}
}
}

如果您储存这份文件
PUT scaling/_doc/1
{
"num": "1.234"
}

然后检索文档,将产生与索引相同的数据:
GET scaling/_doc/1
=>
{
"num": "1.234"
}

但是,检索 num字段的doc值将产生您期望的结果:
GET scaling/doc/_search
{
"docvalue_fields": ["num"],
"script_fields": {
"doc_value": {
"script": {
"source": "doc.num.value"
}
},
"raw_value": {
"script": {
"source": "params._source.num"
}
}
}
}

=>
  {
"_index" : "scaling",
"_type" : "doc",
"_id" : "1",
"_score" : 1.0,
"fields" : {
"raw_value" : [
"1.234" <--- raw value that was sent for indexing
],
"doc_value" : [
1.23 <--- scaled doc value that was indexed
],
"num" : [
1.23 <--- scaled doc value that was indexed
]
}
}

关于elasticsearch - 设置scaling_factor参数时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58398238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com