在NEST 2.3.1中创建索引时出错(弹性搜索)

时间:2016-05-24 06:10:51

标签: c# elasticsearch indexing delegates nest

我在我的.NET项目中使用NEST 2.3.1。

我很陌生。

正如我在一个教程中看到的那样,我已经完成了这段代码。

using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Xml.Linq;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Nest;
using Newtonsoft.Json;
using System.Data.Entity;

namespace Elastic_ConsoleApp
{
    class Program
    {
        public static Uri node;
        public static ConnectionSettings settings;
        public static ElasticClient client;

        static void Main(string[] args)
        {
            node = new Uri("http://localhost:9200");
            settings = new ConnectionSettings(node);
            client = new ElasticClient(settings);
            settings.DefaultIndex("my_blog");

            var indexSettings = new IndexSettings();
            indexSettings.NumberOfReplicas = 1;
            indexSettings.NumberOfShards = 1;

            client.CreateIndex(c => c
                .Index("my_blog")
                .InitializeUsing(indexSettings)
                .AddMapping<Post>(m => m.MapFromAttributes()));
        }
    }
}

但它没有用,我收到了这个错误:

  

错误CS1660无法将lambda表达式转换为类型'IndexName',因为它不是委托类型

在这一行:

client.CreateIndex(c => c
                    .Index("my_blog")
                    .InitializeUsing(indexSettings)
                    .AddMapping<Post>(m => m.MapFromAttributes()));

我尝试在Google上搜索,但我只获得旧版本的帮助!

先谢谢。

3 个答案:

答案 0 :(得分:1)

Uri node        = new Uri(ES_ADDRESS);
var settings    = new ConnectionSettings(node);
settings.DisableDirectStreaming();//Check json
var client      = new ElasticClient(settings);
//Analyzers:
CustomAnalyzer shingles = new CustomAnalyzer
{
  Tokenizer = "standard",
  Filter = new List<string>()
  {
    "standard", "lowercase", "shingle"
  }
};
//Settings for index:
var mapperTemplate = new CreateIndexDescriptor(string.Format("customers"))
  .Settings(s => s
    .Analysis(a => a
      .Analyzers(an => an
        .UserDefined("analyzer_shingles", shingles)
      )
    )
  );
var customer = mapperTemplate.Mappings(ms => ms
  .Map<customers>(m => m
    .AllField(a => a.Analyzer("analyzer_shingles"))
    .AutoMap()
  )
);

//Create index:
var response = client.CreateIndex(customer);

答案 1 :(得分:1)

您正在使用新的ElasticSearch Nest尝试旧方法。 您的代码将与NEST Ver一起使用。 1.x的 更新新版本的代码,或者您可以使用旧版本的NEST。

答案 2 :(得分:1)

使用上一版本的snipet工作:

var indexCreated = client.CreateIndex("person",
                 s => s.Mappings(ms => ms
                 .Map<Person>(m => m)));