使用自定义分析器时如何查看分析后的文本?
How to view the analyzed text when a custom analyzer was used?
我不知道如何测试我自定义的 analyzer/view 分析数据。
通常我会在创建索引时将自定义分析器添加到 "index settings"。我在这种情况下遇到的问题是我没有使用索引,或者至少我认为我没有使用并且我不知道如何将我的自定义分析器添加到 Elasticsearch 客户端?
这是我目前用于测试 "analysis" 部分的方法:
public async Task AnalizeField(string analyzer, string textToAnalyze)
{
var elasticClient = ElasticsearchHelper.DatabaseConnection();
var analyzeResponse = await elasticClient.AnalyzeAsync(a => a
.Analyzer(analyzer)
.Text(textToAnalyze)
);
var result = "";
if (analyzeResponse != null && analyzeResponse.Tokens.Count > 0)
{
foreach (var token in analyzeResponse.Tokens)
{
result += token.Token + " ";
}
}
Console.WriteLine("Analyzing text \"" + textToAnalyze + "\" using the \"" + analyzer + "\" analyzer: " + result);
}
正在索引中测试自定义分析器
在此示例中,我们将向现有索引添加自定义分析器。首先,我们需要关闭索引
client.CloseIndex("analysis-index");
现在,我们可以更新设置以添加分析器
client.UpdateIndexSettings("analysis-index", i => i
.IndexSettings(s => s
.Analysis(a => a
.CharFilters(cf => cf
.Mapping("my_char_filter", m => m
.Mappings("F# => FSharp")
)
)
.TokenFilters(tf => tf
.Synonym("my_synonym", sf => sf
.Synonyms("superior, great")
)
)
.Analyzers(an => an
.Custom("my_analyzer", ca => ca
.Tokenizer("standard")
.CharFilters("my_char_filter")
.Filters("lowercase", "stop", "my_synonym")
)
)
)
)
);
并再次打开索引。在这里,我们也最多等待五秒钟,让索引的状态变为绿色
client.OpenIndex("analysis-index");
client.ClusterHealth(h => h
.WaitForStatus(WaitForStatus.Green)
.Index("analysis-index")
.Timeout(TimeSpan.FromSeconds(5))
);
打开并准备好索引后,让我们测试分析器
var analyzeResponse = client.Analyze(a => a
.Index("analysis-index")
.Analyzer("my_analyzer")
.Text("F# is THE SUPERIOR language :)")
);
您应该尝试安装 Cerebro。
https://github.com/lmenezes/cerebro
安装后,您可以在菜单 Analysis 中找到它。然后你可以很容易地看到"analyze by field type"或"analyze by analyzer"。
这应该有帮助
我不知道如何测试我自定义的 analyzer/view 分析数据。
通常我会在创建索引时将自定义分析器添加到 "index settings"。我在这种情况下遇到的问题是我没有使用索引,或者至少我认为我没有使用并且我不知道如何将我的自定义分析器添加到 Elasticsearch 客户端?
这是我目前用于测试 "analysis" 部分的方法:
public async Task AnalizeField(string analyzer, string textToAnalyze)
{
var elasticClient = ElasticsearchHelper.DatabaseConnection();
var analyzeResponse = await elasticClient.AnalyzeAsync(a => a
.Analyzer(analyzer)
.Text(textToAnalyze)
);
var result = "";
if (analyzeResponse != null && analyzeResponse.Tokens.Count > 0)
{
foreach (var token in analyzeResponse.Tokens)
{
result += token.Token + " ";
}
}
Console.WriteLine("Analyzing text \"" + textToAnalyze + "\" using the \"" + analyzer + "\" analyzer: " + result);
}
正在索引中测试自定义分析器
在此示例中,我们将向现有索引添加自定义分析器。首先,我们需要关闭索引
client.CloseIndex("analysis-index");
现在,我们可以更新设置以添加分析器
client.UpdateIndexSettings("analysis-index", i => i
.IndexSettings(s => s
.Analysis(a => a
.CharFilters(cf => cf
.Mapping("my_char_filter", m => m
.Mappings("F# => FSharp")
)
)
.TokenFilters(tf => tf
.Synonym("my_synonym", sf => sf
.Synonyms("superior, great")
)
)
.Analyzers(an => an
.Custom("my_analyzer", ca => ca
.Tokenizer("standard")
.CharFilters("my_char_filter")
.Filters("lowercase", "stop", "my_synonym")
)
)
)
)
);
并再次打开索引。在这里,我们也最多等待五秒钟,让索引的状态变为绿色
client.OpenIndex("analysis-index");
client.ClusterHealth(h => h
.WaitForStatus(WaitForStatus.Green)
.Index("analysis-index")
.Timeout(TimeSpan.FromSeconds(5))
);
打开并准备好索引后,让我们测试分析器
var analyzeResponse = client.Analyze(a => a
.Index("analysis-index")
.Analyzer("my_analyzer")
.Text("F# is THE SUPERIOR language :)")
);
您应该尝试安装 Cerebro。 https://github.com/lmenezes/cerebro
安装后,您可以在菜单 Analysis 中找到它。然后你可以很容易地看到"analyze by field type"或"analyze by analyzer"。
这应该有帮助