Jon*_*Jon 14
LIKE查询的问题在于它们在执行时间方面很昂贵.您可以设置QueryParser以允许使用以下前导通配符:
QueryParser.setAllowLeadingWildcard(true)
这将允许您进行以下搜索:
*user*
但这需要很长时间才能执行.有时当人们说他们想要一个LIKE查询时,他们真正想要的是模糊 查询.这将允许您执行以下搜索:
user~
哪个符合条款users和fuser.您可以使用0到1之间的浮点值指定查询中的术语与要匹配的术语之间的编辑距离.例如user~0.8,匹配的术语多于user~0.5.
我建议你也看看正则表达式查询,它支持Lucene搜索的正则表达式语法.它可能更接近你真正需要的东西.也许是这样的:
.*user.*
Pas*_*imo 11
Lucene提供了ReverseStringFilter,它允许像*user一样进行前导通配符搜索.它的工作原理是以相反的顺序索引所有术语.
但我认为没有办法做类似'LIKE%user%'的事情.
自从Lucene 2.1你可以使用
QueryParser.setAllowLeadingWildcard(true);
Run Code Online (Sandbox Code Playgroud)
但这可能会扼杀性能.该LuceneFAQ有一些这方面的更多信息.