zoukankan      html  css  js  c++  java
  • Elastic Search.NET -NEST使用(1)

    Elastic Search.NET -NEST

    Object Initializer 语法去构造查询

    Match All query

    最简单的查询应该就是 match_all 了,这种查询会返回所有的文档,并给每份文档的 _score 统一赋值为 1.0

    匹配的文档并不是都会在一次响应中全部返回,默认情况下只返回前十份。你可以使用 fromsize 来将结果分页

    var searchResponse = client.Search<Project>(s => s
        .Query(q => q
            .MatchAll()
        )
    );
    

    上面使用 Fluent API 来描述查询。

    NEST 还公开了一种 Object Initializer 语法去构造查询

    var searchRequest = new SearchRequest<Project>
    {
        Query = new MatchAllQuery()
    };
    
    searchResponse = client.Search<Project>(searchRequest);
    

    Search request parameters

    search request 有一些可用的参数,你可以参阅 search 以获得详细的信息。

    以下是一个示例:

                var searchRequest = new SearchRequest<Tmx2ESModel>();
                searchRequest.From = page;
                searchRequest.Size = size;
                var list = new List<QueryContainer>();
                //optional
                if (!string.IsNullOrWhiteSpace(inModel.ClientGuid))
                {
                	//精准查询使用keyword
                    var clientGuid = new MatchQuery() { Field = Infer.Field<Tmx2ESModel>(f => f.ClientGuid.Suffix("keyword")), Query = inModel.ClientGuid };
                    list.Add(clientGuid);
                }
                 searchRequest.Query = new BoolQuery() { Must = list };
    
                var searchResponse = ESClient.Client.SearchAsync<Tmx2ESModel>(searchRequest);
    

    在net core 注册ES

    添加ESSever

    /// <summary>
        /// 访问ElasticSearch服务类
        /// </summary>
        public class ESSever : IESSever
        {
            /// <summary>
            /// Linq查询的官方Client
            /// </summary>
            public IElasticClient ElasticLinqClient { get; set; }
            /// <summary>
            /// Js查询的官方Client
            /// </summary>
            public IElasticLowLevelClient ElasticJsonClient { get; set; }
            public ESSever(IConfiguration configuration)
            {
                var uris = configuration["ElasticSearchContext:ESUri"].Split(",").ToList().ConvertAll(x => new Uri(x));
                var connectionPool = new StaticConnectionPool(uris);//配置请求池
                var settings = new ConnectionSettings(connectionPool).RequestTimeout(TimeSpan.FromSeconds(30));//请求配置参数
                settings.DisableDirectStreaming().DefaultIndex(configuration["ElasticSearchContext:ESIndexName"]);
                this.ElasticJsonClient = new ElasticLowLevelClient(settings);//json请求客户端初始化
                this.ElasticLinqClient = new ElasticClient(settings);//linq请求客户端初始化
            }
    
            /// <summary>
            /// Creates the Tmx2ESModel asynchronous.
            /// </summary>
            /// <param name="model">The model.</param>
            /// <returns></returns>
            public Task<Nest.CreateResponse> CreateAsync(Tmx2ESModel model)
            {
                return ElasticLinqClient.CreateDocumentAsync(model);
            }
        }
    

    在startup里面在ConfigureServices下面添加如下代码即可

    services.AddSingleton<IESSever, ESSever>();
    

    参考:

    【三】在Asp.Netcore上使用ElasticSearch

  • 相关阅读:
    对象和接口简单比较
    DevExpress报表开发基本流程
    有关ExecuteNonQuery返回值的分析
    2012年度计划
    小测试:有关++i&&i++,你是不是看晕了
    “PE文件格式”1.9版 完整译文
    .NET中的入口及幕后英雄:MSCorEE.dll(转)
    软件构建过程中的隐喻
    转:地图导出格式,教你如何选择
    推荐几个网站
  • 原文地址:https://www.cnblogs.com/tangge/p/14885581.html
Copyright © 2011-2022 走看看