【发布时间】:2016-06-16 22:32:47
【问题描述】:
简而言之,我希望能够拥有一个仅用于搜索的分析器。排序应该由默认分析器进行。
通过添加此代码,我可以成功地使搜索按预期工作。当我搜索“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"
]
}
}
【问题讨论】:
标签: c# search elasticsearch default nest