我坚持使用 a ,StandardAnalyzer
因为似乎没有其他选择。我所做的是通过捕获非单词字符的正则表达式对字符串进行标记,将它们组合在 ANDBooleanQuery
中,并将两个Field
s 的查询组合在另一个 ORBooleanQuery
中。
在我下面的代码中,entry
是单词,description
是定义,s
是搜索字符串CharSequence
。
BooleanQuery bq = new BooleanQuery();
BooleanQuery entryBQ = new BooleanQuery();
BooleanQuery descriptionBQ = new BooleanQuery();
String[] tokens = String.valueOf(s).split("[^a-zA-Z0-9]");
for (String token : tokens) {
if (token.isEmpty()) continue;
entryBQ.add(new WildcardQuery(new Term("entry", token + "*")), BooleanClause.Occur.MUST);
descriptionBQ.add(new WildcardQuery(new Term("description", token + "*")), BooleanClause.Occur.MUST);
}
bq.add(entryBQ, BooleanClause.Occur.SHOULD);
bq.add(descriptionBQ, BooleanClause.Occur.SHOULD);
TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
is.search(bq, collector);
这在我的 Android 应用程序中现在非常慢,但我可以稍后对其进行优化。:)