如何在索引映射定义中将嵌套属性复制到包含POCO的字段中?
当两个字段处于同一对象级别时, 我能够成功地将一个属性复制到另一个属性中.CopyTo
。
但是,我正在努力将嵌套对象上的属性复制到父对象上的属性。
给定以下对象,我想将“街道”从“人”的“地址”属性复制到“人”的“搜索”属性中
Person
{
public string Search { get; set; }
public string LastName { get; set; }
public Address Address { get; set; }
}
Address
{
public string Street { get; set; }
}
如下所示,将“姓氏”映射到“搜索”很简单。
.Map<Person>(map => map
.AutoMap()
.Properties(properties => properties
.Text(text =>
text.Name(name => name.LastName)
.CopyTo(copyTo =>
copyTo.Field(field => field.Search)
)
)
)
但是我无法弄清楚将’Person.Address.Street’复制到’Person.Search’的Nest语法
这是你怎么做
private static void Main()
{
var defaultIndex = "my_index";
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var settings = new ConnectionSettings(pool)
.DefaultIndex(defaultIndex);
var client = new ElasticClient(settings);
if (client.IndexExists(defaultIndex).Exists)
client.DeleteIndex(defaultIndex);
var createIndexResponse = client.CreateIndex(defaultIndex, c => c
.Settings(s => s
.NumberOfShards(1)
.NumberOfReplicas(0)
)
.Mappings(m => m
.Map<Person>(mm => mm
.AutoMap()
.Properties(p => p
.Object<Address>(o => o
.Name(n => n.Address)
.AutoMap()
.Properties(pp => pp
.Text(t => t
.Name(nn => nn.Street)
.CopyTo(co => co
.Field(Infer.Field<Person>(ff => ff.Search))
)
)
)
)
)
)
)
);
var indexResponse = client.Index(new Person
{
LastName = "foo",
Address = new Address
{
Street = "bar"
}
} , i => i
.Refresh(Refresh.WaitFor)
);
var searchResponse = client.Search<Person>(s => s
.Query(q => q
.Match(m => m
.Field(f => f.Search)
.Query("bar")
)
)
);
}
public class Person
{
public string Search { get; set; }
public string LastName { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string Street { get; set; }
}
本质上
Person
属性Address
属性映射到Person
Address
属性Street
属性并进行设置CopyTo(...)
。此时,泛型类型参数是Address
类型,因此您需要使用Nest.Infer.Field<T>
来访问的Search
属性Person
,或使用字符串。搜索返回期望的文档
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.2876821,
"hits" : [
{
"_index" : "my_index",
"_type" : "person",
"_id" : "5tQDEWgBrKRHlz9qAve8",
"_score" : 0.2876821,
"_source" : {
"lastName" : "foo",
"address" : {
"street" : "bar"
}
}
}
]
}
}
copy_to
Elasticsearch中的字段不一定需要在C#POCO上作为属性公开,因为_source
不会包含它们的值。但是,作为属性公开对于强类型字段访问可能很有用。
我有一些文档在嵌套对象中有嵌套对象: 在这里,主文档有几个嵌套的对象(标记),对于每个标记有几个嵌套的对象(事件)。 我希望获得transfer_processed类型的事件在transfer类型的标记之后60000毫秒内发生的所有文档。为此,我需要查询tags.at、tags.type、tags.events.at和tags.events.type。我不知道如何查询:我只查询tags.event
问题内容: 我有一些文档在嵌套对象中具有嵌套对象: 在这里,主文档有几个嵌套对象(标签),每个标签有几个嵌套对象(事件)。 我想获得的所有地方类型的事件文件 transfer_processed 类型的标签后发生60000毫秒 转移 。为此,我需要同时查询 tag.at , tags.type , tags.events.at 和 tags.events.type 。而且我不知道怎么做:我只设法对
我正在尝试开发一个ElasticSearch聚合查询,它根据嵌套对象中的属性执行结果的组合。 将为索引设置相应的映射。 我需要的查询如下所示: 查询需要按嵌套属性的名称分组,但从根对象的bin属性分组,这似乎在ElasticSearch中引起了一些麻烦。 当尝试进行以下预固化时: 此上下文似乎不允许基于产品对象的根对项目进行装箱。 ManufacturerName中指定的ManufacturerN
我想用flow注释以下内容: 我知道如何对进行类型检查,以使的类型为(如上所示),但如何对其属性进行类型检查? 已经尝试过这个: 但是flow只是抱怨从未使用过和。
问题内容: 我在elasticsearch中的索引具有以下映射: 源文档如下: 我正在尝试使用距离脚本来基于地理点计算距离。我在elasticsearch结果中发现了该帖子的Return distance吗?帮我 我正在尝试获取所有结果,按半径1km进行过滤,获取距离,然后对geo_point进行排序。查询的结构如下: 我收到状态为500的以下错误: 我尝试以这种方式重写查询: 然后我得到这个错误
问题内容: 是否可以使elasticsearch中的所有嵌套对象自动映射为默认嵌套的类型。而不是对象? 问题答案: 是的,您可以在创建索引时使用以下动态模板来做到这一点: