我很有弹性。我正在尝试使用以下代码进行搜索,但是当我想要回到“#34; house"”时,如果我输入" hou"我能找到它,但是如果我输入" ouse"它不起作用。此外,分析仪也无法正常工作。这是添加它的正确位置吗?
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)))
);
答案 0 :(得分:1)
我们不知道分析仪是否工作,因为您没有提供它的名称,也没有显示分析仪的组成。没有这些信息,就无法回答你的问题:)
有几点可以帮助你朝着正确的方向前进
.AnalyzeWildcard()
的正文中使用.QueryString()
来评估通配符,但我希望您已经使用包含edgengram token filter的分析器在索引时分析此字段,因为您获得了结果回到部分期限"hou"
。reverse
令牌过滤器的自定义分析器,然后edgengram
,从术语末尾(而不是开始)生成ngrams过滤,然后是另一个reverse
令牌过滤器。您可能希望将此分析器和索引应用于单独的multi-field
子字段(可能称之为"reverse"
?)然后在搜索时,搜索字段和子字段,对“转发”应用提升“字段(因为人们倾向于为搜索添加前缀,但在您的域中可能会有所不同)。答案 1 :(得分:0)
在索引时间,它需要Ngram过滤器,不仅需要EdgeNGram,因为我们不仅要从左边创建子词,还要从单词的不同位置创建子词。例如,单词house将被切割为[ho,ou,美国,SE,侯,组织单位,使用,HOUS,乌斯房子。 尽管它在索引上花费的时间更多,因为它创建了比EdgeNGram更多的单词。 有了EdgeNGram,我们得到了 [HO,侯,HOUS,房子]。