Elasticsearch.Net 입문 강좌 사용(1)
13373 단어 Elasticsearch.Net
먼저 홈 페이지 에 가서 Elasticsearch 2.3.4 설치 패 키 지 를 다운로드 하고 압축 을 푼 후 cmd 명령 행 에서 설치 디 렉 터 리 에 들 어간 다음 bin 디 렉 터 리 에 들 어가 elasticsearch.bat 명령 을 실행 합 니 다.
elasticsearch 플러그 인 elasticsearch-head 설치:
bin 디 렉 터 리 에서 명령 실행 plugin-install mobz/elasticsearch-head
그리고.net 프로 그래 밍 을 시작 하여 콘 솔 프로그램 을 구축 합 니 다.
Program.cs 코드 는 다음 과 같 습 니 다.
class Program
{
static void Main(string[] args)
{
Console.WriteLine("*Program : " + DateTime.Now);
var business = new Business();
var swRead = new Stopwatch();
//swRead.Start();
//business.AddToDb();//sqlserver
//swRead.Stop();
//Console.WriteLine("DB : " + swRead.ElapsedMilliseconds);
//swRead.Reset();
//swRead.Start();
//business.AddToElasticIndex();
//swRead.Stop();
//Console.WriteLine("ES : " + swRead.ElapsedMilliseconds);
var sw = new Stopwatch();
sw.Start();
var personsFromDB = business.GetFromDB();
sw.Stop();
Console.WriteLine("DB : " + sw.ElapsedMilliseconds);
sw.Reset();
sw.Start();
var personsFromEs = business.GetFromES();
sw.Stop();
Console.WriteLine("ES : " + sw.ElapsedMilliseconds);
Console.ReadLine();
}
}
BLL 층 의 Business.cs 클래스:
public class Business
{
private List<PersonDetail> _personList = new List<PersonDetail>();
//SQLSERVER
PersonDbProvider dbProvider = new PersonDbProvider();
//ElasticSearch
ESProvider esProvider = new ESProvider();
public void AddToDb()
{
_personList = Util.Get10000PersonDetails();// , 10000
foreach (var personDetail in _personList)
{
dbProvider.AddPerson(personDetail);
}
}
public void AddToElasticIndex()
{
_personList = Util.Get10000PersonDetailsWithID();
foreach (var personDetail in _personList)
{
esProvider.Index(personDetail);
}
}
public List<PersonDetail> GetFromDB()
{
return dbProvider.GetAllPersonDetails();
}
public List<PersonDetail> GetFromES()
{
return esProvider.GetAll();
}
}
PersonDb Provider.cs 와 Elastic Search Provider.cs 및 Util.cs,Setting.cs 클래스:
public class PersonDbProvider
{
public bool AddPerson(PersonDetail personDetail)
{
try
{ //
using (var db = new PersonContext())
{
db.PersonDetails.Add(personDetail);
db.SaveChanges();
return true;
}
}
catch (Exception)
{
return false;
}
}
public List<PersonDetail> GetAllPersonDetails()
{
try
{
using (var db = new PersonContext())
{
return db.PersonDetails.ToList();
}
}
catch (Exception)
{
return null;
}
}
}
public class ESProvider
{
public static ElasticClient client = new ElasticClient(Setting.ConnectionSettings);
public bool Index(PersonDetail person)
{
var client = new ElasticClient(Setting.ConnectionSettings);
try
{
//
// index , index,ElasticSearch setting defaultIndex, ,
var index = client.Index(person);
return index.Created;
}
catch (Exception ex)
{
Console.WriteLine(" Excepton Message : " + ex.Message);
}
return false;
}
public List<PersonDetail> GetAll()
{
var searchResults = client.Search<PersonDetail>(s => s
.From(0)
.Size(10000)
);
return searchResults.Documents.ToList();
}
public List<PersonDetail> GetEntities(string keyword)
{
var client = new ElasticClient(Setting.ConnectionSettings);
#region
keyword = String.Format("*{0}*", keyword);
// Operator Or, keyword "One Two" , , or
// Operator
var searchResults = client.Search<PersonDetail>(s => s
.Index("elastic-search-app")
.Query(q => q.QueryString(qs => qs.Query(keyword).DefaultOperator(Operator.And)))
);
//--------------------------------------------------------------------------------------
// ES , "One" "JustOne" , "One" **, SQL %keyword%, ,
//wholeKeyword = keyword;
//keyword = String.Format("*{0}*", keyword);
//QueryContainer query = new QueryStringQuery() { Query = keyword, DefaultOperator = Operator.And };
//if (!String.IsNullOrEmpty(wholeKeyword))
//{
// QueryContainer wholeWordQuery = new QueryStringQuery() { Query = wholeKeyword };
// query = query || wholeWordQuery;
//}
//var searchResults = client.Search<Person>(s => s
// .Index("zhixiao-application")
// .Query(query)
//);
#endregion
#region
// term Query
//Term , Foo, foo, FOO ,
// term query ,term query Field , 。
// QueryContainer query2 = new TermQuery { Field = item.Key, Value = item.Value.ToLower() };
//--------------------------------------------------------------------------------------
//var searchResults = client.Search<PersonDetail>(s => s
// .Index("elastic-search-app")
// .Query(q => q.Term(t => t.OnField(f => f.LastName == "keyword")))
//);
//
//QueryContainer termQuery = new TermQuery { Field = "lastname", Value = "keyword" };
//var searchResults = client.Search<PersonDetail>(s => s
// .Index("elastic-search-app")
// .Query(termQuery)
//);
//--------------------------------------------------------------------------------------
// Query String query
//QueryString query , ( DefaultField ),queryString query 。QueryString term ,
// lastname "t Boterhuis 1", "terhuis" ( **), term query , ES term, 。
//keyword = "t Boterhuis 2";
//QueryContainer wholeWordQuery = new QueryStringQuery() { Query = keyword, DefaultOperator = Operator.And };
//var searchResults = client.Search<PersonDetail>(s => s
// .Index("elastic-search-app")
// .Query(wholeWordQuery)
//);
#endregion
return searchResults.Documents.ToList();
}
public List<PersonDetail> Sort(string keyword)
{
//
var response =
client.DeleteIndex(
new DeleteIndexRequest(new IndexNameMarker()
{
Name = "elastic-search-app",
Type = typeof(PersonDetail)
}));
//
var indexResult = client.CreateIndex("PD-application");
var response1 = client.Map<PersonDetail>(m => m.MapFromAttributes());
IEnumerable<PersonDetail> persons = new List<PersonDetail>
{
new PersonDetail()
{
Id = 4,
FirstName = "Boterhuis-040",
LastName = "Gusto-040",
},
new PersonDetail()
{
Id = 5,
FirstName = "[email protected]",
LastName = "t Boterhuis 1",
},
new PersonDetail()
{
Id = 6,
FirstName = "Aberdeen #110",
LastName = "[email protected]",
},
new PersonDetail()
{
Id = 7,
FirstName = "Aberdeen #110",
LastName = "t Boterhuis 2",
},
};
foreach (var person in persons)
{
client.Index(person);
}
var searchResults = client.Search<PersonDetail>(s => s
.Index("PD-application")
.Sort(sort => sort.OnField(f => f.Id).Order(SortOrder.Ascending))
);
return searchResults.Documents.ToList();
}
}
public static class Util
{
// 10000 sqlserver
public static List<PersonDetail> Get10000PersonDetails()
{
var personDetailsList = new List<PersonDetail>();
for (int i = 0; i < 10000; i++)
{
personDetailsList.Add(new PersonDetail()
{
FirstName = "FN" + new Random().Next(int.MaxValue),
LastName = "LN" + new Random().Next(int.MaxValue)
});
}
return personDetailsList;
}
// 10000 ElasticSearch
public static List<PersonDetail> Get10000PersonDetailsWithID()
{
var personDetailsList = new List<PersonDetail>();
for (int i = 0; i < 10000; i++)
{
personDetailsList.Add(new PersonDetail()
{
Id = i * new Random().Next(99),
FirstName = "FN" + new Random().Next(int.MaxValue),
LastName = "LN" + new Random().Next(int.MaxValue)
});
}
return personDetailsList;
}
}
public static class Setting
{
public static Uri Node
{
get
{
return new Uri("http://localhost:9200");
}
}
//
public static ConnectionSettings ConnectionSettings
{
get
{
return new ConnectionSettings(Node, defaultIndex: "es-index-app");
}
}
}
Model 계층 코드:
public partial class PersonDetail
{
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public partial class PersonContext : DbContext
{
static PersonContext()
{
Database.SetInitializer<PersonContext>(null);
}
public PersonContext()
: base("Name=PersonContext")
{
}
public DbSet<PersonDetail> PersonDetails { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// OnModelCreating , OnModelCreating ,
modelBuilder.Configurations.Add(new PersonDetailMap()); //
}
}
//Fluent API Configuration
public class PersonDetailMap : EntityTypeConfiguration<PersonDetail>
{
public PersonDetailMap()
{
//
this.HasKey(t => new { t.Id, t.FirstName, t.LastName });
//
this.Property(t => t.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Property(t => t.FirstName)
.IsRequired();
this.Property(t => t.LastName)
.IsRequired();
// &
this.ToTable("PersonDetails");
this.Property(t => t.Id).HasColumnName("Id");
this.Property(t => t.FirstName).HasColumnName("FirstName");
this.Property(t => t.LastName).HasColumnName("LastName");
}
}
sqlserver 스 크 립 트:
USE [Person]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[PersonDetails](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](max) NOT NULL,
[LastName] [nvarchar](max) NOT NULL
) ON [PRIMARY]
GO
결과 그림:
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Embulk를 사용하여 ElasticCloud로 보내기Embulk에서 ElasticCloud에 보낼 수 있을까라고 생각비망록도 겸해 기술을 남깁니다 Embulk 설치 ElasticCloud (14 일 체험판) brew라면 아래 명령 입력 파일 만들기 파일 내용 seed...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.