我正在尝试使用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-什么是一个好的正则表达式?我需要删除所有空格,以便我可以使用通配符查询。用于回答这个问题的加分点:)
干杯
答案 0 :(得分:2)
我已经破解了一个效果很好的解决方案。
我现在可以搜索电话号码或整个电话号码,并忽略空格。
e.g。 使用'09''09123','123','12 3'可以找到许多09 123 4567等。也可以使用信件,例如:0800 BLAHBLAH。