Posts in category “Programming”

Vue.js Event modifier: .stop .prevent .passive .once .self .capture explanation

Two articles explain well this subject. One is in Chinese, the other is in English.

.NET Core 3.1 Swagger UI Tweaks

  1. Present enums as string. Modify your StartUp.cs, add the highlight part below:
             services.AddMemoryCache().AddMvcCore().AddJsonOptions(opts =>
                 {
                     opts.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
                 })
                 .AddDataAnnotationsLocalization();
    

  1. Enable XML Comments
    1. Manually add the two lines in PropertyGroup below to the .csproj file:
      <PropertyGroup>
        <GenerateDocumentationFile>true</GenerateDocumentationFile>
        <NoWarn>$(NoWarn);1591</NoWarn>
      </PropertyGroup>
      
    2. Add the options in the code below
           services.AddSwaggerGen(options =>
           {
               options.IncludeXmlComments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{AppDomain.CurrentDomain.FriendlyName}.xml"), true);
           });
      

SQLSugar: How to implement Count(FieldName) and GROUP BY in SQLSugar

            await Db.Queryable<Entity>().Where(_ => _.SampleFieldName== sampleFieldValue)
                .GroupBy("AnothterFieldNameInStringFormat")
                .Select<ResultModel>("AnotherFieldNameInStringFormat, Count(AnotherFieldNameInStringFormat) Total")
                .ToListAsync();

Elasticsearch Nest with Logstash 神奇故障一则 ”返回了搜索结果,但所有字段都是null“

这与 Nest 默认的字段名映射规则有关。C# 项目字段名往往是 CamelCase,然而 Nest API在创建索引时,默认会将 CamelCase 的字段名,转换为 camelCase 的字段名。当然,查询的时候,它也会精确的按照 camelCase 字段名映射数据。如果你只用 Nest,其实是不会有任何问题的。毕竟 AutoMapper 对字段名大小写是很宽容的。

当我们引入 Logstash 动态更新索引之后,不和谐的一幕出现了。凡是 Logstash 更新的过数据,查询的时候会返回搜索结果,但所有字段的值都是null。这是因为Logstash在更新索引的时候,没有做 CamelCase => camelCase 的字段名转换。

了解了问题产生的原因,解决起来也就容易了。幸运的是,Nest有一个配置参数,可以设置为索引时不做字段名转换。直接上代码

        public static void AddElasticsearch(
            this IServiceCollection services, string connectionUrl, string connectionIndex)
        {
            var defaultIndex = connectionIndex;

            var settings = new ConnectionSettings(new Uri(connectionUrl))
                .DefaultIndex(defaultIndex);
            settings.DefaultFieldNameInferrer(p => p);
            var client = new ElasticClient(settings);

            services.AddSingleton(client);
        }

需要注意的是,代码修改后,别忘记重建索引。否则你会发现原来不正常的( Logstash更新过的数据)都正常了,原来搜索正常的,现在却所有字段名都变成了null。

Tips collection

  • Buefy is a lightweight UI components library for Vue.js based on Bulma
  • @keyup.enter="eventHandler" doesn't work in el-input, but @keyup.enter.native="eventHandler" does. #element-ui
  • git rm -rf . && git clean -fxd is the best way to delete all files except .git directory. #git
  • To make your dynamic LINQ query safe, you must use placeholders for all user input. Never concatenate your string! #dotnetcore
  • try_files $uri $uir/ =404; is better than try_files $uri $uri/ /index.html;, because it can avoid endless loop when /index.html doesn't exist. #nginx
  • git tag -n99 show tags along with annotations Reference
  • new crontab task added
    0 6 * * * /bin/docker container prune -f 
    10 6 * * * /bin/docker rmi $(/bin/docker images -f "dangling=true" -q)