如何使用lucene API(AND(b OR c))创建嵌套的布尔查询?

Arn*_*sch 12 java lucene api

我有一个索引对象有三个字段(userId,标题,描述).我想找到特定用户的所有对象,其中标题或描述包含给定的关键字.

我有类似的东西(但这显然是错的):

WildcardQuery nameQuery = new WildcardQuery(new Term("name", filter.getSearch()));
WildcardQuery descQuery = new WildcardQuery(new Term("description", filter.getSearch()));

TermQuery userQuery = new TermQuery(new Term("user_id", u.getId()+""));

BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(new BooleanClause(name_query, Occur.SHOULD));
booleanQuery.add(new BooleanClause(desc_query, Occur.SHOULD));
booleanQuery.add(new BooleanClause(user_query, Occur.MUST));
Run Code Online (Sandbox Code Playgroud)

如何修改代码以获取具有正确ID的所有对象以及标题或描述中的搜索短语?

Bar*_*ski 22

我认为它会是这样的:

TermQuery userQuery = new TermQuery(new Term("user_id", u.getId()+""));

BooleanQuery orQuery = new BooleanQuery();
orQuery.add(new BooleanClause(name_query, Occur.SHOULD));
orQuery.add(new BooleanClause(desc_query, Occur.SHOULD));

BooleanQuery andQuery = new BooleanQuery();
andQuery.add(new BooleanClause(userQuery , Occur.MUST));
andQuery.add(new BooleanClause(orQuery, Occur.MUST));
Run Code Online (Sandbox Code Playgroud)