0

我正在将 Apache Lucene Search 与我的 java 应用程序一起使用。查询建立在使用国家代码搜索人名(字母)(通常表示为两个字母的单词,例如 - IN - India、US - USA、UK- England 等)

但是问题出现了,当我尝试使用 Alphabet="Steve" 和 Country="IN" 的查询条件搜索值时,搜索查询结果没有值,即使记录存在,只有当国家被选为 IN(India )

alphabet = alphabet.trim() + "*";
query = new QueryParser(Version.LUCENE_30, searchFor[0], analyzer).parse(alphabet.trim());
mainQuery.add(query, BooleanClause.Occur.MUST);
}
if ((country != null) && (country.trim().length() > 0)) {
query = new QueryParser(Version.LUCENE_30, searchFor[1], analyzer).parse(country.trim());
mainQuery.add(query, BooleanClause.Occur.MUST);
}
4

1 回答 1

1

您想KeywordAnalyzer用于诸如国家代码之类的东西(不需要标记化或大小写/停用词折叠);对于人名,WhitespaceAnalyzer可能是一个不错的选择。PerFieldAnalyzerWrapper将两者结合起来。例子:

Analyzer ka = new KeywordAnalyzer(Version.LUCENE_30)
Analyzer wa = new WhitespaceAnalyzer(Version.LUCENE_30)
PerFieldAnalyzerWrapper wrapper =
      new PerFieldAnalyzerWrapper(ka);
wrapper.addAnalyzer("countrycode", ka);

现在只需创建您的IndexWriterusing wrapper.

于 2013-03-05T08:53:49.007 回答