Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带模糊的弹性搜索边图在评分时产生问题_C#_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# 带模糊的弹性搜索边图在评分时产生问题

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

我使用的是elastic,我对我的搜索相关性非常满意,除了一个OCASION。例如,如果我搜索世界“play”,我会得到包含wold“plays”的文档,其分数高于这些带有“play”一词的文档。这是因为我使用的是带有模糊性的EdgeGrams(索引时)。Auto(搜索时).是否有任何过滤器或方法比模糊过滤器或方法更精确

下面是用于索引的代码

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的世界中,为一个字段的各种“评分方式”设置多个字段是非常常见的。