栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Elasticsearch .NET

Elasticsearch .NET

简体中文 | 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 IEnumerable GetProductsKeyword(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 IEnumerable GetSimpleQueryString(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 IEnumerable GetExists(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 IEnumerable GetTerm(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 IEnumerable GetTerms(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 IEnumerable TermsSet(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 IEnumerable GetTermRange(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 IEnumerable GetPrefix(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 IEnumerable GetIds(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 IEnumerable GetWildcard(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 IEnumerable GetProductsByPage(int from, int size)
{
    return _elasticClient.Search(x => x.Index("Products").From(from).Size(size).Sort(x => x.Descending(v => v.Id))).documents;
}

*、
*、
*、
*、
*、

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/775591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号