elasticsearch 电话号码分析器,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 电话号码分析器,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 电话号码分析器

elasticsearch 电话号码分析器,elasticsearch,nest,elasticsearch,Nest,我正在尝试使用C#app中的Nest为电话号码创建一个自定义分析器。以下内容似乎没有任何用处: var settings = new IndexSettings { NumberOfReplicas = maximumReplicas ?? _configuration.Value.Replicas, NumberOfShards = _configuration.Value.Shards,

我正在尝试使用C#app中的Nest为电话号码创建一个自定义分析器。以下内容似乎没有任何用处:

        var settings = new IndexSettings
            {
                NumberOfReplicas = maximumReplicas ?? _configuration.Value.Replicas,
                NumberOfShards = _configuration.Value.Shards,
            };

        settings.Add("index.refresh_interval", "10s");
        settings.Add("merge.policy.merge_factor", "10");
        settings.Add("search.slowlog.threshold.fetch.warn", "1s");

        const string phoneorcodePattern = @"([^\\p{L})";  // ignore that this is silly
        settings.Analysis.Tokenizers.Add(new KeyValuePair<string, TokenizerBase>("phoneorpostcode", new PatternTokenizer() { Pattern = phoneorcodePattern, Flags = "CASE_INSENSITIVE" }));
        settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("phoneorpostcode", new CustomAnalyzer() { Tokenizer = "phoneorpostcode", Filter = new List<string> { "lowercase" } }));

        // standard analzers
        settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("keyword", new KeywordAnalyzer()));
        settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("simple", new SimpleAnalyzer()));


        // field mapping stuff here...

        client.CreateIndex(_searchConnection.Settings.SearchIndexName, settings);
我得到:

{
  "error" : "ElasticSearchIllegalArgumentException[failed to find analyzer [phoneorpostcode]]",
  "status" : 400
}
问题:

1-为什么会出现错误?索引创建得很好,我使用分析器创建了字段

2-如何在映射中查看分析器

(3-什么是好的正则表达式?我需要删除所有空白,以便使用通配符查询。回答此问题的额外积分:)


干杯

我已经破解了一个非常有效的解决方案

  • 删除电话号码中的空白,并将其编入索引
  • 使用空白分析器-不简单
  • 使用通配符查询并从值中删除空格
  • 我现在可以搜索一些电话号码或整个电话号码,空白被忽略

    e、 g。
    使用“09”“09123”“123”“12 3”等可以找到一些09 123 4567。也可以与字母一起使用,例如:0800 BLAHBLAH。

    对于.NET兼容的正则表达式,请尝试Expresso(Ultrapico),它附带许多示例。@Jonesie您能给我看一下完整的代码吗?您需要以某种方式将这些设置传递给CreateIndex或UpdateSettings。@MartijnLaarman嗯,之后有一堆代码来进行映射(在我自己设计的xml文件中定义),然后我只需执行以下操作:client.CreateIndex(_searchConnection.settings.SearchIndexName,settings);我已经更新了上面的示例以显示这一点。
    {
      "error" : "ElasticSearchIllegalArgumentException[failed to find analyzer [phoneorpostcode]]",
      "status" : 400
    }