是否可以在ElasticSearch中使用对象进行null_value
映射?
{
"properties-v3": {
"mappings": {
"property": {
"properties": {
// ... omitting lots of properties for brevity
"stats": { // <-- Need to populate this if null
"properties": {
"bookings": {
"type": "long",
"null_value": 0
},
"enquiries": {
"type": "long",
"null_value": 0
},
"favorites": {
"type": "long",
"null_value": 0
},
"pageViews": {
"type": "long",
"null_value": 0
}
}
},
// ... more properties here
}
}
}
}
}
如果上面映射中的stats
属性为null,我想创建一个对象,其属性按其null_value映射填充。在底层属性上指定null_value似乎不起作用。
ElasticSearch是否允许对象的null_value映射?
答案 0 :(得分:2)
首先,让我们看看null_value的作用。对于字段name,如果将null_value设置为某个值,则不会将此信息添加到_source,而是将此值转到反向索引。这意味着您可以基于null_value进行搜索,但不会在_source中显示。
要发现一个例子,假设我正在索引以下文档 -
{
"class" : "10m
"address" : "abcs"
}
这里,让我们说,对于字段名称,我们已将null_value设为“John” 现在,如果我执行以下查询 -
{
"query" : {
"match" : {
"name" : "john"
}
}
}
即使它没有带有值john的字段名称,它也会与之前的文档匹配。但是在返回的文件中,这个值不会显示出来。这意味着_source不会被改变,只是我们正在改变整个上下文的搜索能力行为。
现在回到你的问题 - 如果你想把null_value放到一个对象上说, 对于字段名称,将以下对象作为null_value
{
"first_name" : "john",
"last_name" : "dep"
}
然后,可能的是将null_value分别分配给name.first_name和name.last_name两个字段作为john和dep。
答案 1 :(得分:1)
不,您不能将null_value
与type : object
一起使用
但是field_value_factor
可以选择missing
检查文档https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html
如果文档没有该字段,则使用该值。修饰符和 因子仍然适用于它,就像它是从 文档。