Java 用空格分割Lucene QueryString的最有效方法

Java 用空格分割Lucene QueryString的最有效方法,java,lucene,Java,Lucene,按空格分割搜索查询时,例如搜索名称时,术语“John Doe”将匹配结果“John”、“Doe”或“John Doe”,而不是仅搜索整个查询。我现在就是这样做的: BooleanQuery booleanQuery = new BooleanQuery(); String[] terms = queryString.split(" "); for(String term : terms) { booleanQuery.add(new FuzzyQuery(new Term("firstN

按空格分割搜索查询时,例如搜索名称时,术语“John Doe”将匹配结果“John”、“Doe”或“John Doe”,而不是仅搜索整个查询。我现在就是这样做的:

BooleanQuery booleanQuery = new BooleanQuery();
String[] terms = queryString.split(" ");
for(String term : terms) {
    booleanQuery.add(new FuzzyQuery(new Term("firstName", term)), BooleanClause.Occur.SHOULD);
    booleanQuery.add(new FuzzyQuery(new Term("lastName", term)), BooleanClause.Occur.SHOULD);
}

对我来说,这种方法有点混乱。有更好的方法吗?

如果您没有使用普通的分析器,那么查询解析器是错误的

根据您正在尝试的操作,您可能应该使用分析器拆分查询字符串。这不是强制性的,但如果您不这样做(例如,您可以分割空白,然后独立分析每个单词),则需要解决一些(非平凡的)问题:

  • 当对一个单词的分析产生几个术语(可能与复合名称一起出现)时,该怎么办
  • 当单词是停止词(不产生任何标记)时该怎么办

为什么不使用QueryParser?是的,使用QueryParser和WhiteSpaceAnalyzer(如果您只想在空白处拆分)我使用带模糊的布尔查询,因为我希望能够匹配部分单词,例如Jon会拉起John等。QueryParser和WhiteSpaceAnalyzer能做到这一点吗?