Elastic-QueryString 无法正常工作

Elastic-QueryString doesn't work correctly

我是弹性新手。我正在尝试使用以下代码进行搜索,但是当我想找回单词 "house" 时,如果我输入 "hou" 我可以找到它,但是如果我输入 "ouse" 它却找不到' t work.Also,分析器不work.Is这是添加它的正确位置吗?

var response = client.Search<Homes>(n => n
    .Index(index)
    .Type(type)
    .Size(searchSize)
    .From(0)
    //.Analyzer(analyzername)
    .TrackScores(true)
   .Query(q=>q.QueryString(qs=>qs.Query("*"+searchWord+"*")
                                 .Fields(f=>f.Field(fieldsForSearchList[0]))
                                 .Analyzer(analyzername)))
);

我们不知道分析器是否有效,因为您没有提供它的名称,也没有显示分析器的组成。没有这些信息,就不可能回答你的问题:)

有几点可以帮助您朝着正确的方向前进

  1. 您在 query string query. By default, these are not enabled as they can be expensive in terms of performance (there are usually better ways to index your data such as using custom analyzers). You can have wildcards evaulated by using .AnalyzeWildcard() inside the body of .QueryString(), but I expect you are already analyzing this field at index time with an analyzer that incorporates an edgengram token filter 中使用了通配符,因为您得到了部分术语 "hou" 的结果。
  2. 您还可以通过构建应用 reverse token filter, then an edgengram filter, followed by another reverse token filter. You probably want to apply this analyzer and index into a separate multi-field 子字段(可以称之为 "reverse"?) 然后在搜索时,同时搜索字段和子字段,对 "forward" 字段应用提升(因为人们倾向于在搜索前添加前缀,但这在您的域中可能有所不同)。

在索引时间,它需要 Ngram 过滤器,不仅是 EdgeNGram,因为我们不仅需要从左边缘创建子词,还需要从 word.For 示例的不同位置创建子词,单词 house 将被剪切为 [ ho,ou,us,se,hou,ous,use,house,use,house]。 尽管它在索引上花费了更多的时间,因为它创建的单词比 EdgeNGram 多得多。 使用 EdgeNGram 我们得到 [ho,hou,house,house].