我在我的.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上搜索,但我只获得旧版本的帮助!
先谢谢。
答案 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)));