我正在尝试在一个大的姓氏列表中搜索部分开始匹配。所以Wein *应该找到Weinberg,Weinkamm等。
我可以通过创建一个特殊字段并添加
来完成此操作 <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="50" preserveOriginal="1"/>
到schema.xml中的类型规范。当我将上面的行仅添加到索引分析器并将其留空以供查询分析器使用时,我可以通过搜索special_field进行搜索:Wein并获得预期的结果。
现在我看到solr也有* -syntax。 EdgeNGramFilterFactory与* -syntax之间的联系是什么?
我是在正确地做事还是有更好,更经常的方式?
谢谢!
答案 0 :(得分:3)
或者只是做一个简单的外卡匹配:
name:Pe*
答案 1 :(得分:1)
我不推荐Wein *查询。这在内部实现为PrefixQuery,它重写原始查询以包括前缀等于“Wein”的所有术语。根据索引的大小(我的意思是多少个术语),这个查询重写可能是一个瓶颈。
索引时的EdgeNGramFilter是一种更好的方法。此解决方案将使用更多空间,但查询将更快地处理。
答案 2 :(得分:1)
注意:我也在Lucene论坛上问过这个问题,我得到了一个很好的答案: http://lucene.472066.n3.nabble.com/How-to-do-partial-beginning-matches-td781147.html