当我尝试索引我定义类型的文档时,有一个应该被映射为嵌套对象的列表("类型":"嵌套"),它& #39;被映射为常规对象类型。
看看代码:
我有一个像这样的简单课程:
[ElasticType()]
public class MyJob
{
[ValueFieldAttribute]
public int jobCode { get; set; }
[ValueFieldAttribute(Type = FieldType.nested)]
public IList<JobProfessionalFieldInfo> JobProfessionalFields { get; set; }
}
JobProfessionalFieldInfo类的代码是:
[ElasticType()]
public class JobProfessionalFieldInfo
{
[ValueFieldAttribute]
public int JobId { get; set; }
[ValueFieldAttribute]
public int CategoryId { get; set; }
}
ValueFieldAttribute类的代码是:
public class ValueFieldAttribute : ElasticPropertyAttribute
{
public ValueFieldAttribute()
: base()
{
this.Store = false;
this.Index = FieldIndexOption.not_analyzed;
}
}
我的节目:
static void Main(string[] args)
{
ConnectionSettings node = new ConnectionSettings(new Uri("http://localhost:9200"));
node.SetDefaultIndex("jobs");
ElasticClient client = new ElasticClient(node);
List<JobProfessionalFieldInfo> list = new List<JobProfessionalFieldInfo>();
list.Add(new JobProfessionalFieldInfo { CategoryId = 1, JobId = 1 });
list.Add(new JobProfessionalFieldInfo { CategoryId = 2, JobId = 2 });
var res = client.Index<MyJob>(new MyJob
{
jobCode = 1,
JobProfessionalFields = list
},"jobs", "MyJob",1);
}
现在,当我运行它时,它会成功索引对象...但是当我通过GET jobs / MyJob / _mapping获取索引的映射时,我看到jobProfessionalFields没有&#34;类型& #34;:&#34;嵌套&#34;在其映射中。
这导致了一个类似下面的查询,返回索引的文档而它不应该得到它(那是什么嵌套类型是对的?):
GET jobs/_search
{
"query":
{
"bool":
{
"must":
[
{"match": {"jobId":1}},
{"match": {"categoryId":2}}
]
}
}
}
不是结束: 我看一下here, 有回答的人告诉我们,当我们使用注释时,我们需要手动调用createIndex和Map方法,但问题是我没有任何通用的Map方法......! 看看here :(只是为了让你进入链接 - 这里是它的开始..)
namespace Nest
{
public partial class ElasticClient...
而且我不知道如何使用非通用Map方法来放置MyJob类的映射。
如何让这些东西将jobProfessionalFields映射为嵌套类型的家伙?
感谢你们的帮助!
答案 0 :(得分:0)
好的,明白了!
MapFromAttributes&lt;&gt;是用于放置映射的正确通用方法(至少在当前的Nest版本I&#39; m中使用 - 0.12.0)。 但是它需要手动调用索引创建,o.w它给出了一个IndexMissing异常(就像上面提到的链接中所说的那样)。
client.CreateIndex("jobs", new IndexSettings { });
var res = client.MapFromAttributes<MyJob>("jobs","MyJob");
但这真的很有趣,为什么还不足以定义
[ElasticProperty(Type = FieldType.nested)],
以获取嵌套映射..
我很乐意为那个答案得到答案。