Lucene“或Queries”

时间:2009-07-22 14:01:28

标签: search lucene

我是Lucene的新手,我正在尝试进行类似的搜索

 content="some thext" and (id ="A" or id="B" or id="c")

我真的迷失了,你能帮助我吗?

谢谢。

3 个答案:

答案 0 :(得分:23)

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);

答案 1 :(得分:15)

我相信Query Parser Syntax documentation中的“分组”部分提供了答案:

(jakarta OR apache) AND website

我怀疑你应该让你的运营商(andor)成为大写。同样,我认为你不能使用equals运算符(改为使用冒号)。

content:"some thext" AND (id:"A" OR id:"B" OR id:"c")

答案 2 :(得分:-1)

现在不推荐使用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()