简而言之,我希望能够拥有仅用于搜索的分析器。默认分析器应进行排序。
通过添加此代码,我可以成功地按预期进行搜索。当我搜索“be”时,会发现带有“Bé”的内容。
var an = new CustomAnalyzer();
an.Tokenizer = "keyword";
an.Filter = new List<string>();
an.Filter.Add("standard");
an.Filter.Add("lowercase");
an.Filter.Add("ascii_folding");
return await CreateIndexAsync(c => c
.Index(_index)
.Analysis(a => a.Analyzers(a1 => a1.Add("default", an)))
.Analysis(a => a.TokenFilters(tf => tf.Add("ascii_folding", new AsciiFoldingTokenFilter { PreserveOriginal = true })))
);
这导致我的排序也被ascii折叠了。
一种
一种
B等
在这里阅读,看来我应该能够将分析器仅应用于搜索。
https://www.elastic.co/guide/en/elasticsearch/reference/1.4/analysis-analyzers.html#default-analyzers
“并且default_search可用于配置将仅在搜索时使用的默认分析器”
如果我正确理解了这一点,则应该可以通过更改此行将分析器仅应用于搜索。
.Analysis(a => a.Analyzers(a1 => a1.Add("default_search", an)))
这会完全破坏分析仪。搜索将默认进行,并且不会命中Bé。有什么想法我在这里做错了吗?
这是我的要求
Request: {
"from": 0,
"size": 70,
"_source": {
"include": [
"Name",
]
},
"query": {
"bool": {
"must": [
{
"wildcard": {
"_all": {
"value": "*be*"
}
}
}
]
}
},
"filter": {}
}
我在_all中使用通配符搜索应该没有问题吗?
这是一个排序请求。问题是我的结果在这里按ascii折叠值排序(如果我使用默认分析器)
Request: {
"from": 0,
"size": 70,
"sort": [
{
"Name": {
"order": "asc"
}
}
],
"_source": {
"include": [
"Name"
]
}
}
最佳答案
如果您始终在_all字段上执行搜索,则可以为此专门设置一个其他分析器。
创建两个分析器,一个为标准分析器,另一个为具有ascii_folding的分析器。
var allAnalyzer = new CustomAnalyzer();
allAnalyzer.Tokenizer = "keyword";
allAnalyzer.Filter.Add("customasciifolding");
var defAnalyzer= new CustomAnalyzer();
defAnalyzer.Tokenizer = "keyword";
defAnalyzer.Filter = new List<string>();
defAnalyzer.Filter.Add("standard");
用您的分析器创建索引。
return await CreateIndexAsync(c => c
.Index(_index)
.Analysis(a => a
.Analyzers(a1 => a1
.Add("default", defAnalyzer)
.Add("customAll",allAnalyzer)
)
.TokenFilters(tf => tf.Add("customasciifolding", new AsciiFoldingTokenFilter { PreserveOriginal = true })
)
)
);
然后,当您进行 map 设置时,如下所示
await _elasticClient.MapAsync<MyClass>(m => m
.MapFromAttributes()
.AllField(af => af.Analyzer("customAll"))
);
关于c# - C#NEST ElasticSearch Default_Search分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35774894/