- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题
我正在尝试将 bool 值保存到 elasticsearch,但它是特别适用于它为 NULL。在这种情况下是一种无关紧要。
好像有好几种选择,但是还不完全清楚是什么最好的。
我们使用的是 ElasticSearch 5.0.2 版
选项 1
最简单的方法是将其保存为具有 NULL 值的 bool 值。那些将被 ES 视为“缺失”。
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"my_boolean": { "type": "boolean"}
}
}
}
}
PUT my_index/my_type/1
{"my_boolean": true}
PUT my_index/my_type/2
{"my_boolean": false}
PUT my_index/my_type/3
{"my_boolean": null}
这有几个问题,其中之一是聚合。没有似乎是获取值 true
、false
和 NULL
的简单方法一个聚合。
我知道缺少
功能,所以我知道我可以执行以下操作:
GET my_index/_search
{
"size":0,
"aggregations": {
"my_boolean": {
"terms": {
"field": "my_boolean"
}
},
"missing_fields": {
"missing" : {
"field": "my_boolean"
}
}
}
}
但这会导致一个桶有 2 个值(真/假)和一个单独的计算丢失的文件。这看起来会引起问题。
选项 2
另一种选择是实际上给 NULL 一个值,如 the manual .问题是值(value)需要是正确的类型,并且只有 true 和 false 作为 bool 值。
The null_value needs to be the same datatype as the field. For instance, a long field cannot have a string null_value.
这意味着我们可以使用支持超过 2 个值的不同类型,例如整数,但这在我的脑海中就像在说:让 map 它为整数,并定义 1 为 true,2 为 false,3 为 null。这会起作用,但我们会有一个所有人都应该知道的隐式映射关于。 (所有生产者/消费者/whatyamahaveits)。
选项 3
最终版本将尝试编写解决此问题的脚本。
GET my_index/_search
{
"size":0,
"aggregations": {
"my_boolean": {
"terms": {
"script" : {
"inline": "if(doc['my_boolean'].length === 1) { if(doc['my_boolean'].value === true){ return 1;} else {return 2;} } else { return 3;}"
}
}
}
}
}
现在我们确实在一些理智的桶中得到了正确的结果。
"aggregations": {
"my_boolean": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "1",
"doc_count": 1
},
{
"key": "2",
"doc_count": 1
},
{
"key": "3",
"doc_count": 1
}
]
}
}
请注意,我们在这里仍然有一个与键的隐式映射,所以这似乎有一些与将其映射为整数有。但是,你的数据类型应该是什么,所以可能是什么。请注意,我们不能有一个以“null”为键的桶。当然,我们可以称它们为“true”、“false”和“null”(字符串),但这同样的情况,只是隐藏的更多。
问题
处理这个 null 问题的最佳方法是什么?(或者我们应该称之为“三态 bool 问题”?)
澄清一下:我们担心稍后“非标准”值可能会导致问题。我们首先看到的是 bucketing,我们可以使用上面的脚本解决方案修复它,但也许我们稍后会遇到其他问题。因此,我们正在寻找保存此类数据的最佳做法,而不是针对特定问题的快速解决方案。
最佳答案
您可以使用 missing
setting terms
聚合(即不是单独的 missing
聚合)。
那样的话,您可以继续使用您的 bool 字段并获得包含 0、1 和 -1(对于空值)的三个存储桶?
{
"size":0,
"aggregations": {
"my_boolean": {
"terms": {
"field": "my_boolean",
"missing": -1 <--- add this
}
}
}
}
它没有必须更改字段类型并将其编码为其他数据类型(整数/字符串)的缺点,而且还使您无需利用脚本,因为这不会很好地扩展。
关于elasticsearch - 我们如何处理具有特定含义的 NULL 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41038142/
这个问题在这里已经有了答案: Towards the "true" definition of JAVA_HOME (5 个答案) 关闭 4 年前。 为什么 ActiveMQ 提供者需要设置 JAV
这个问题在这里已经有了答案: What is a lambda expression in C++11? (10 个答案) 关闭 8 年前。 这是来自 boosts asio 的一个例子。这是什么意
这个问题在这里已经有了答案: What does the double colon (::) mean in CSS? (3 个答案) 关闭 7 年前。 我经常看到这种用法。特别是伪类。“::”在
嗨,另一个愚蠢的简单问题。我注意到在Apple框架中的某些typedef中使用符号"<<"谁能告诉我这是什么意思?: enum { UIViewAutoresizingNone
someObject.$() 是什么意思? 我正在浏览 sapui5 工具包中的 tilecontainer-dbg 文件,发现了这个: var oDomRef = this.$(); or some
这个问题已经有答案了: How to interpret function parameters in software and language documentation? (4 个回答) 已关闭
我遇到过这个语法。任何人都可以解释一下 getArg1ListInfo:()=>(object.freeze(arg1)) 的含义 function foo (arg1,arg2) { let
对于子类,我有以下代码: class child1 : public parent { public: static parent* function1(void) { ret
这个问题在这里已经有了答案: What does "|=" mean? (pipe equal operator) (6 个答案) 关闭 1 年前。 我有一部分代码包含以下功能: void Keyb
以下在 C++ 中是什么意思? typedef PComplex RComplex [100]; 请注意,PComplex 是我代码中的用户定义类型。 谢谢 最佳答案 RComplex 是 PComp
在我的 Lisp 代码中,我有函数 (nfa-regex-compile),它创建一个包含初始状态、转换和最终状态的 cons 列表(表示自动机的节点)从作为参数给出的正则表达式开始。 在这种情况下,
以下文字摘自 Learning Spark 第 3 章 One issue to watch out for when passing functions is inadvertently seria
PHP 文档 block 中以下内容的含义是什么: #@+ zend框架代码中的一个例子: /**#@+ * @const string Version constant numbers */ c
由于 python 的一些版本控制问题,我必须使用自定义函数来比较 HMAC (SHA512)。为此,我找到了这个函数: def compare_digest(x, y): if not (i
取自this answer here : static const qi::rule node = '{' >> *node >> '}' | +~qi::char_("{}"); 请注意,声明了名称
我正在查看 chi 包的文档。我看到类似的东西: https://github.com/pressly/chi/blob/master/_examples/rest/main.go#L154 data
我想知道如果我采用值为 8 的 INT,这是否意味着我只能从 1 到 99999999 或从 1 到 4294967295 UNSIGNED? 最佳答案 文档似乎很清楚这一点: Numeric Typ
我想知道如果我采用值为 8 的 INT,这是否意味着我只能从 1 到 99999999 或从 1 到 4294967295 UNSIGNED? 最佳答案 文档似乎很清楚这一点: Numeric Typ
这个问题在这里已经有了答案: 关闭9年前。 Possible Duplicate: Does “/* (non-javadoc)” have a well-understood meaning? 以下
在 Prolog 代码中,可以使用“ headless ”Horn 子句将指令传递给编译器,这些子句与指向左侧的物质蕴涵 ':-' (⇐) 的左侧没有头部关系。例如,导入模块或声明 Unit Test
我是一名优秀的程序员,十分优秀!