我怎样才能在lucene中搜索到;约翰J";让人们喜欢;“约翰·詹姆逊”;不仅仅是和约翰在一起的人?

我怎样才能在lucene中搜索到;约翰J";让人们喜欢;“约翰·詹姆逊”;不仅仅是和约翰在一起的人?,lucene,Lucene,出于我无法控制的原因,我必须通过全局搜索来实现这一点。我已经将搜索词“johnj”转换为(John和J),这适用于姓氏与第一个字母开头不同的人 我如何才能让对“约翰J”的搜索变成“找到所有拥有约翰的人,然后在这个领域找到另一个不同的J” 谢谢您的时间。您可以尝试使用通配符查询。例如: Term term = new Term("secondName", "J*"); Query query = new WildcardQuery(term); 我假设您的名字和第二个名字有不同的字段。您可以创建

出于我无法控制的原因,我必须通过全局搜索来实现这一点。我已经将搜索词“johnj”转换为(John和J),这适用于姓氏与第一个字母开头不同的人

我如何才能让对“约翰J”的搜索变成“找到所有拥有约翰的人,然后在这个领域找到另一个不同的J”


谢谢您的时间。

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

Term term = new Term("secondName", "J*");
Query query = new WildcardQuery(term);
我假设您的名字和第二个名字有不同的字段。您可以创建一个布尔查询,其中包含对第一个和第二个名称的查询组合

通配符查询的文档:


我希望这会有所帮助。

因为您提到它是一种提前输入;前缀查询可能会有所帮助-

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")));`

我猜你在用NGramTokenFilter什么的?看起来像一个很可能是你要找的。使用引号。感谢您的评论。我正在用lucene构建一个typeahead输入。因此,用户将输入“johnj”,因此如果没有一堆逻辑,我不能简单地执行J*。