如何用"like"运算符查询lucene?

Fre*_*ind 16 java lucene sql-like

通配符*只能在单词的末尾使用,例如user*.

我想查询一下%user%,怎么做?

Jon*_*Jon 14

LIKE查询的问题在于它们在执行时间方面很昂贵.您可以设置QueryParser以允许使用以下前导通配符:

QueryParser.setAllowLeadingWildcard(true)

这将允许您进行以下搜索:

*user*

但这需要很长时间才能执行.有时当人们说他们想要一个LIKE查询时,他们真正想要的是模糊 查询.这将允许您执行以下搜索:

user~

哪个符合条款usersfuser.您可以使用0到1之间的浮点值指定查询中的术语与要匹配的术语之间的编辑距离.例如user~0.8,匹配的术语多于user~0.5.

我建议你也看看正则表达式查询,它支持Lucene搜索的正则表达式语法.它可能更接近你真正需要的东西.也许是这样的:

.*user.*


Pas*_*imo 11

Lucene提供了ReverseStringFilter,它允许像*user一样进行前导通配符搜索.它的工作原理是以相反的顺序索引所有术语.

但我认为没有办法做类似'LIKE%user%'的事情.

  • 有趣.实际上,它确实意味着您需要提前设置索引以允许前导通配符.通过查看错误(https://issues.apache.org/jira/browse/LUCENE-1398),您似乎只能指定一个主要的通配符,但不能在同一个术语中指定一个尾随通配符(因为那时你'回到同样的问题). (2认同)

And*_*s_D 6

自从Lucene 2.1你可以使用

QueryParser.setAllowLeadingWildcard(true);
Run Code Online (Sandbox Code Playgroud)

但这可能会扼杀性能.该LuceneFAQ有一些这方面的更多信息.