Elasticsearch .NET

简体中文 | Elastic
Elasticsearch .NET Clients
Indexing
精确值查找【SQL】

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口风格的搜索和数据分析引擎。

Elasticsearch​​​​​ 存储结构


启用Elasticsearch
D:\elasticsearch-7.6.0\bin\elasticsearch.bat

检查ES是否启动成功
打开浏览器,地址栏输入http://localhost:9200/?pretty,如果看到以下画面,说明启动成功


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

/// <summary>
/// 文档索引,同步【不带参数】
/// </summary>
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
    }
}

/// <summary>
/// 文档索引,异步【不带参数】
/// </summary>
/// <returns></returns>
public async Task CreateIndexDocumentAsync()
{
    var product = new Product
    {
        Id = 1
    };
    var indexResponseAsync = await _elasticClient.IndexDocumentAsync(product);
}

/// <summary>
/// 文档索引,设置附加参数
/// </summary>
/// <param name="Product"></param>
public void Create()
{
    var product = new Product
    {
        Id = 1
    };
    _elasticClient.Index(product, idx => idx.Index("product"));

    var indexResponse2 = _elasticClient.Index(new IndexRequest<Product>(product, "product"));
}

3.2、Ingest Pipelines

public void IndicesCreate()
{
    _elasticClient.Indices.Create("people", c => c.Map<Person>(p => p.AutoMap().Properties(props => props.Keyword(t => t.Name("initials"))
    .Ip(t => t.Name(dv => dv.IpAddress)).Object<GeoIp>(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 IEnumerable<Product> GetProductsKeyword(Product product)
{
    return _elasticClient.Search<Product>(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 IEnumerable<Product> GetSimpleQueryString(Product product)
{
    return _elasticClient.Search<Product>(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 IEnumerable<Product> GetExists(Product product)
{
    return _elasticClient.Search<Product>(s => s.Index("Products").Query(q =>
    q.Exists(t => t.Name("query").Boost(1.1).Field(p => p.Id)))).Documents;
}

4.4、term

public IEnumerable<Product> GetTerm(Product product)
{
    //return _elasticClient.Search<Product>(s => s.Index("Products").Query(q => q.Term(t => t.Id, product.Id))).Documents;
    return _elasticClient.Search<Product>(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 IEnumerable<Product> GetTerms(Product product)
{
    return _elasticClient.Search<Product>(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 IEnumerable<Product> TermsSet(Product product)
{
    return _elasticClient.Search<Product>(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 IEnumerable<Product> GetTermRange(Product product)
{
    return _elasticClient.Search<Product>(s => s.Index("Products").Query(q => 
    q.TermRange(t => t.Name("query").Boost(1.1).Field(p => p.Id)))).Documents;
}

4.8、prefix

public IEnumerable<Product> GetPrefix(Product product)
{
    var result = _elasticClient.Search<Product>(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 IEnumerable<Product> GetIds(Product product)
{
    var result = _elasticClient.Search<Product>(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 IEnumerable<Product> GetWildcard(Product product)
{
    var result = _elasticClient.Search<Product>(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 IEnumerable<Product> GetProductsByPage(int from, int size)
{
    return _elasticClient.Search<Product>(x => x.Index("Products").From(from).Size(size).Sort(x => x.Descending(v => v.Id))).Documents;
}

*、
*、
*、
*、
*、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值