【问题标题】:'CreateIndexDescriptor' does not contain a definition for 'AddMapping'“CreateIndexDescriptor”不包含“AddMapping”的定义
【发布时间】:2016-05-23 21:47:16
【问题描述】:

我是 Elasticsearch 的初学者。在像 https://msdn.microsoft.com/en-us/magazine/dn904674.aspx 那样做一个示例应用程序时,它在

中显示错误
public void CreateMarketingIndex()
{
 this.client.CreateIndex("marketing", c =>.AddMapping<MarketingDocument>
     (m => m.Properties(ps => ps.Attachment
       (a => a.Name(o => o.Document)
         .TitleField(t => t.Name(x => x.Name).TermVector(TermVectorOption.WithPositionsOffsets))))));
} 

“CreateIndexDescriptor”不包含“AddMapping”的定义 并且没有扩展方法“AddMapping”接受第一个参数 可以找到类型“CreateIndexDescriptor”(您是否缺少使用 指令还是程序集引用?)

我是否缺少任何参考。 我引用了 Elasticsearch.net 和 Nest

【问题讨论】:

  • 您能否验证您发布的代码是否是您文件中的代码,其中一些与示例有些不同。看到这条线c =&gt; c.AddMapping&lt;Marketing&gt;

标签: c# elasticsearch elasticsearch-net


【解决方案1】:

我认为 AddMapping 可能是针对旧版本的 Nest 客户端的。我一直在使用映射。试试这样的:

this.client.CreateIndex("marketing", c => c
    .Mappings(md => md
        .Map<MarketingDocument>(m => m.Properties(ps...

【讨论】:

  • 谢谢,您的回答帮助了我。我也有类似的错误出现在 var queryResult = this.client.Search(d => d.AllIndices() .AllTypes() .** QueryString(queryTerm));** 你能建议一个解决方案吗?
  • 也许尝试类似:client.Search(d => d.AllIndices().AllTypes().Query(q => q.QueryString(qs => qs.Query(queryTerm ))));第一个 .Query 开始搜索的查询部分。然后内部 q 是一个查询容器描述符,您可以使用它开始定义查询。所以我说查询是一个QueryString查询,然后那个内部的qs描述了查询字符串,你可以用它通过你的搜索词来查询。
【解决方案2】:

你可以这样做:

var descriptor = new CreateIndexDescriptor(mIndexName)
     .Mappings(x => x.Map<Model>(m => m.AutoMap()));

或者没有对象类型

var descriptor = new CreateIndexDescriptor(mIndexName)
     .Mappings(x => x.Map(model, m => m.AutoMap()));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多