出于我无法控制的原因,我必须通过全局搜索来完成此操作。我已经把一个搜索词“John J”转换成了(John AND J),这个名字适用于姓氏不与第一个字母相同的任何人。
我怎样才能使“约翰J”的搜索成为“找到所有拥有约翰然后又是另一个不同的J的人”?
感谢您的时间。
答案 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")));`