如何使用“喜欢”运算符查询lucene?

2022-09-03 04:27:10

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

我想用一个赞查询,该怎么做?%user%


答案 1

LIKE查询的问题在于它们在执行时间方面很昂贵。可以将 QueryParser 设置为允许具有以下各项的前导通配符:

QueryParser.setAllowLeadingWildcard(true)

这将允许您进行搜索,例如:

*user*

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

user~

这将与术语和 匹配。您可以使用介于 0 和 1 之间的浮点值指定查询中的术语与要匹配的术语之间的编辑距离。例如,将匹配比 多个术语。usersfuseruser~0.8user~0.5

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

.*user.*


答案 2

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

但我认为没有办法做类似“LIKE %user%”的事情。


推荐