【发布时间】:2010-11-13 00:33:17
【问题描述】:
我是 Lucene 的新手,我正在尝试进行类似这样的搜索
content="some thext" and (id ="A" or id="B" or id="c")
我真的很迷茫,你能帮帮我吗
谢谢。
【问题讨论】:
我是 Lucene 的新手,我正在尝试进行类似这样的搜索
content="some thext" and (id ="A" or id="B" or id="c")
我真的很迷茫,你能帮帮我吗
谢谢。
【问题讨论】:
BooleanQuery mainQuery = new BooleanQuery();
TermQuery contentFilter = new TermQuery(new Term("content", "some text"));
mainQuery.add(contentFilter, BooleanClause.Occur.MUST);
BooleanQuery idFilter = new BooleanQuery();
idFilter.setMinimumNumberShouldMatch(1);
idFilter.add(new TermQuery(new Term("id", A)), BooleanClause.Occur.SHOULD);
idFilter.add(new TermQuery(new Term("id", B)), BooleanClause.Occur.SHOULD);
idFilter.add(new TermQuery(new Term("id", C)), BooleanClause.Occur.SHOULD);
mainQuery.Add(idFilter, BooleanClause.Occur.MUST);
【讨论】:
moduleFilter 应该更改为idFilter。无论如何 +1 回答。
我相信Query Parser Syntax documentation 中的“分组”部分提供了答案:
(jakarta OR apache) AND website
我怀疑您应该将运算符 (and, or) 设为大写。同样,我认为您不能使用等号运算符(改用冒号)。
content:"some thext" AND (id:"A" OR id:"B" OR id:"c")
【讨论】:
content:"some thext" AND id:("A" OR "B" OR "c")
BooleanQuery 现已弃用。
新语法如下所示。 (应该 == OR,必须 == AND)
val searchManager = Search.getSearchManager(cache)
val queryBuilder = searchManager.buildQueryBuilderForClass(classTag[T].runtimeClass).get()
val luceneQuery = queryBuilder.bool()
luceneQuery.should(new TermQuery(new Term("type", "lala"))
luceneQuery.createQuery()
【讨论】: