电话号码分析仪

时间:2013-10-17 02:11:20

标签: elasticsearch nest

我正在尝试使用C#应用程序中的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);

当我使用CURL测试分析仪时:

D:\>curl -XGET "http://localhost:9200/blah/_analyze?analyzer=phoneorpostcode&pretty" -d "123 456 789"

我明白了:

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

问题:

1-为什么错误?索引创建得很好,我有使用分析器的字段。

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

(3-什么是一个好的正则表达式?我需要删除所有空格,以便我可以使用通配符查询。用于回答这个问题的加分点:)

干杯

1 个答案:

答案 0 :(得分:2)

我已经破解了一个效果很好的解决方案。

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

    e.g。 使用'09''09123','123','12 3'可以找到许多09 123 4567等。也可以使用信件,例如:0800 BLAHBLAH。