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

时间:2012-01-24 06:55:15

标签: 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("firstName", term)), BooleanClause.Occur.SHOULD);
    booleanQuery.add(new FuzzyQuery(new Term("lastName", term)), BooleanClause.Occur.SHOULD);
}

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

1 个答案:

答案 0 :(得分:0)

如果您没有使用普通的分析器,那么您的查询解析器是错误的。 You should analyze query terms the same way they were analyzed at indexing time

根据您要执行的操作,您应该将查询字符串与分析器分开。它不是强制性的,但如果你不这样做(例如你可以拆分空格然后独立分析每个单词),你将需要解决一些(非平凡的)问题:

  • 当一个单词的分析产生几个术语时可以做什么(可能会出现复合名称)?
  • 当这个词是一个停用词(不产生任何令牌)时该怎么办?