C# 带模糊的弹性搜索边图在评分时产生问题
我使用的是elastic,我对我的搜索相关性非常满意,除了一个OCASION。例如,如果我搜索世界“play”,我会得到包含wold“plays”的文档,其分数高于这些带有“play”一词的文档。这是因为我使用的是带有模糊性的EdgeGrams(索引时)。Auto(搜索时).是否有任何过滤器或方法比模糊过滤器或方法更精确 下面是用于索引的代码C# 带模糊的弹性搜索边图在评分时产生问题,c#,
elasticsearch,nest,C#,
elasticsearch,Nest,我使用的是elastic,我对我的搜索相关性非常满意,除了一个OCASION。例如,如果我搜索世界“play”,我会得到包含wold“plays”的文档,其分数高于这些带有“play”一词的文档。这是因为我使用的是带有模糊性的EdgeGrams(索引时)。Auto(搜索时).是否有任何过滤器或方法比模糊过滤器或方法更精确 下面是用于索引的代码 var response = client.CreateIndex(index, s => s .Settings(s1 => s1.Numb
var response = client.CreateIndex(index, s => s
.Settings(s1 => s1.NumberOfShards(1).NumberOfReplicas(1)
.Analysis(a => a.TokenFilters(t => t.EdgeNGram("edge", ed => ed.MaxGram(50).MinGram(1).Side(EdgeNGramSide.Front))
.Lowercase("lowercase", gl => gl.Language(Language.Greek.ToString())).KeywordMarker("keywords", gk => gk.Keywords("")))
.Analyzers(a1 => a1.Custom("forindex", t => t.Tokenizer("standard")
.Filters("edge", "lowercase", "keywords" ))
.Custom("forsearch", cu => cu.Tokenizer("standard")
.Filters("lowercase", "keywords"))))));
在这里搜索
var query = new MatchQuery()
{
Query = searchWord,
Operator = Operator.And,
Field = fieldName,
Fuzziness = Fuzziness.Auto,
PrefixLength = 1,
Analyzer = "forsearch"
};
您可以将字段索引为多字段,并将带有edgengram的分析器应用于子字段,将标准分析器应用于字段。现在在搜索时,构建一个结合了这两者的
bool
查询(可能是must
子句中的标准分析字段和should
子句中的edgengram分析字段)。这只是一种方法,但还有许多其他的可能性:)谢谢你的建议,但我更喜欢这样,而不是将其作为一个多字段进行索引。除了@RussCam建议的方法外,我在这里看不到其他方法。在Elasticsearch的世界中,为一个字段的各种“评分方式”设置多个字段是非常常见的。