作为执行模糊搜索时的一项要求,我们需要区分没有模糊性的匹配结果与由于模糊性而匹配的结果。
例如,如果索引具有:
查询是"紫色或汽车〜"如果模糊性为1,则所有结果都会产生结果,但是" foxy cart"将被标记为特别模糊的结果。我想知道是否有任何支持,或者有人建议如何实施此功能?我猜测的一个选项是将模糊性设置为0并重新执行查询,然后标记差异。如果有人能提供其他更好的建议,我感激不尽?提前谢谢。
答案 0 :(得分:1)
运行两个单独的查询是对我来说最有意义的方法。
您可以运行两个查询,一个只获得完全匹配,另一个只获得 模糊结果,例如:
purple car
purple car~ -car
哪个应该使这些集互斥,因此您不必麻烦将一个查询的结果与另一个查询的结果进行匹配。然而,它也失去了基于分数容易地交错模糊和精确结果的能力。无论哪种方法都符合您的目的。
另外,如果你只需要将你的精确匹配提升到顶部,那么使用模糊术语进行查询,并且使用一个重要的提升术语应该很好地完成这一点,例如:
purple car~ car^100
答案 1 :(得分:1)
.NEST示例:
.Query(q => q
.Bool(b => b
.Should(
st => st.Match(m => m.Query(term).Field(f => f.FullName).Fuzziness(Fuzziness.EditDistance(1)).Boost(1.1).MinimumShouldMatch("100%")),
st => st.Match(m => m.Query(term).Field(f => f.FullName).Boost(10).MinimumShouldMatch("100%"))
)))