假设我们正在使用edismax,我们的用户输入他们的型号时会出错,并在搜索框中输入 widget abc12x 。我们在product_name上匹配所有三个文档,但在model_number上没有匹配,即使我们与文档1匹配。
处理这种情况的最佳方法是什么,以便我们可以让用户知道他们的model_number不是完全匹配但是Doc 1可能正是他们想要的?模糊搜索(abc12x~)显然会优雅地解决这个问题,但我们事先并不知道它是必需的,我们也不想肆无忌惮地使用它,最终只会损害搜索相关性,性能等。
可能是一个基本问题,但对Solr来说是新的。感谢。
答案 0 :(得分:0)
你的指数会变得更大,但是N-gram是获得部分匹配的好方法。对于您的方案,edge N-gram可以使用。
答案 1 :(得分:0)
您可以在条款中添加字符邻近度修饰符,以便在查询时处理此问题:
q={!edismax}widget~3 abc12x~3
这将在索引中找到所提供搜索字词'edit distance'内的字词。这样做的好处是还可以匹配查询字词' acb123'到索引词'abc123'插入或删除一个字符都是一个编辑,交换两个字符是两个编辑。