我怎样才能为“John J”搜索lucene并让像John Jameson这样的人不仅仅是约翰的人?

时间:2017-07-06 21:14:46

标签: lucene

出于我无法控制的原因,我必须通过全局搜索来完成此操作。我已经把一个搜索词“John J”转换成了(John AND J),这个名字适用于姓氏不与第一个字母相同的任何人。

我怎样才能使“约翰J”的搜索成为“找到所有拥有约翰然后又是另一个不同的J的人”?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

您可能想尝试使用通配符查询。例如:

Term term = new Term("secondName", "J*");
Query query = new WildcardQuery(term);

我假设你有第一个和第二个名字的不同字段。您可以使用第一个和第二个名称的查询组合创建一个布尔查询。

WildcardQuery的文档:http://lucene.apache.org/core/6_2_0/core/org/apache/lucene/search/WildcardQuery.html

我希望这会有所帮助。

答案 1 :(得分:0)

既然你提到它是一个提前输入的类型; prefixQuery可能有帮助 -

new PrefixQuery(new Term("lastName","J"));

这将返回lastName以“J”开头的所有文档。

要获得firstName以“John”开头且 lastName以“J”开头的结果,您可以拥有 -

BooleanQuery.Builder booleanQueryBuilder;
booleanQueryBuilder.add(new PrefixQuery(new Term("firstName","John")));
booleanQueryBuilder.add(new PrefixQuery(new Term("lastName","J")));`