简体中文 | Elastic
Elasticsearch .NET Clients
Indexing
精确值查找【SQL】
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口风格的搜索和数据分析引擎。
Elasticsearch 存储结构
1、管理 NuGet 程序包(N)...
Elasticsearch.Net NEST
2、Getting started
单实例连接
var client = new ElasticClient();
var settings = new ConnectionSettings(new Uri("http://127.0.0.1:9200"))
.DefaultIndex("people");
var client = new ElasticClient(settings);
集群连接
var uris = new[]
{
new Uri("http://localhost:9200"),
new Uri("http://localhost:9201"),
new Uri("http://localhost:9202"),
};
var connectionPool = new SniffingConnectionPool(uris);
var settings = new ConnectionSettings(connectionPool)
.DefaultIndex("people");
var client = new ElasticClient(settings);
查询主要分为两种类型:精确匹配、全文检索匹配。
精确匹配:例如 term、exists、term set、 range、prefix、 ids、 wildcard、regexp、
fuzzy等。
全文检索:例如match、match_phrase、multi_match、match_phrase_prefix、query_string 等
3、Indexing
3.1、Indexing documents
////// 文档索引,同步【不带参数】 /// public void CreateIndexdocument() { var product = new Product { Id = 1 }; var indexResponse = _elasticClient.Indexdocument(product); if (!indexResponse.IsValid) { // If the request isn't valid, we can take action here } } ////// 文档索引,异步【不带参数】 /// ///public async Task CreateIndexdocumentAsync() { var product = new Product { Id = 1 }; var indexResponseAsync = await _elasticClient.IndexdocumentAsync(product); } /// /// 文档索引,设置附加参数 /// /// public void Create() { var product = new Product { Id = 1 }; _elasticClient.Index(product, idx => idx.Index("product")); var indexResponse2 = _elasticClient.Index(new IndexRequest(product, "product")); }
3.2、Ingest Pipelines
public void IndicesCreate()
{
_elasticClient.Indices.Create("people", c => c.Map(p => p.AutoMap().Properties(props => props.Keyword(t => t.Name("initials"))
.Ip(t => t.Name(dv => dv.IpAddress)).Object(t => t.Name(dv => dv.GeoIp)))));
}
3.3、Reindexing documents
public void Reindex()
{
_elasticClient.ReindexonServer(r => r.Source(s => s.Index("source_index")).Destination(d => d.Index("destination_index")).WaitForCompletion());
}
4、Query DSL
4.1、match
public IEnumerableGetProductsKeyword(Product product) { return _elasticClient.Search (s => s.Index("Products").Query(q => q.Match(mq => mq.Field(f => f.Id).Query(product.Id.ToString())))).documents; }
4.2、simple-query-string
public IEnumerableGetSimpleQueryString(Product product) { return _elasticClient.Search (s => s.Index("Products").Query(q => q.SimpleQueryString(c => c .Name("named_query") .Boost(1.1) .Fields(f => f.Field(p => p.Id).Field("myOtherField")) .Query("hello world") .Analyzer("standard") .DefaultOperator(Operator.Or) .Flags(SimpleQueryStringFlags.And | SimpleQueryStringFlags.Near) .Lenient() .AnalyzeWildcard() .MinimumShouldMatch("30%") .FuzzyPrefixLength(0) .FuzzyMaxExpansions(50) .FuzzyTranspositions() .AutoGenerateSynonymsPhraseQuery(false)))).documents; }
4.3、exists
public IEnumerableGetExists(Product product) { return _elasticClient.Search (s => s.Index("Products").Query(q => q.Exists(t => t.Name("query").Boost(1.1).Field(p => p.Id)))).documents; }
4.4、term
public IEnumerableGetTerm(Product product) { //return _elasticClient.Search (s => s.Index("Products").Query(q => q.Term(t => t.Id, product.Id))).documents; return _elasticClient.Search (s => s.Index("Products").Query(q => q.Term(t => t.Name("named_query").Boost(1.1).Field(p => p.Id).Value("project description")))).documents; }
4.5、terms
public IEnumerableGetTerms(Product product) { return _elasticClient.Search (s => s.Index("Products").Query(q => q.Terms(t => t.Name("named_query").Boost(1.1).Field(p => p.Id).Terms("term1", "term2")))).documents; }
4.6、terms-set
public IEnumerableTermsSet(Product product) { return _elasticClient.Search (s => s.Index("Products").Query(q => q.TermsSet(c => c.Name("named_query").Boost(1.1).Field(p => p.Id).Terms("master", "dev").MinimumShouldMatchField(p => p.Id)))).documents; }
4.7、term-range
public IEnumerableGetTermRange(Product product) { return _elasticClient.Search (s => s.Index("Products").Query(q => q.TermRange(t => t.Name("query").Boost(1.1).Field(p => p.Id)))).documents; }
4.8、prefix
public IEnumerableGetPrefix(Product product) { var result = _elasticClient.Search (s => s.Index("Products").Query(q => q.Prefix(t => t.Name("query").Boost(1.1).Field(p => p.Id).Value("proj").Rewrite(MultiTermQueryRewrite.TopTerms(10))))).documents; return result; }
4.9、ids
public IEnumerableGetIds(Product product) { var result = _elasticClient.Search (s => s.Index("Products").Query(q => q.Ids(t => t.Name("query").Boost(1.1).Values(1, 2, 3, 4)))).documents; return result; }
4.10、Wildcard
public IEnumerableGetWildcard(Product product) { var result = _elasticClient.Search (s => s.Index("Products").Query(q => q.Wildcard(c => c.Name("named_query").Boost(1.1).Field(p => p.Id).Value("p*oj").Rewrite(MultiTermQueryRewrite.TopTermsBoost(10))))).documents; return result; }
4.11、From And Size Usage
public IEnumerableGetProductsByPage(int from, int size) { return _elasticClient.Search (x => x.Index("Products").From(from).Size(size).Sort(x => x.Descending(v => v.Id))).documents; }
*、
*、
*、
*、
*、



