2009-07-22 38 views
10

Tôi mới trong Lucene, tôi đang cố gắng để làm một cái gì đó tìm kiếm như thế nàyLucene "Hoặc Truy vấn"

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

Tôi thực sự bị mất với điều đó, bạn có thể giúp tôi

Cảm ơn bạn.

Trả lời

10

Tôi tin rằng "Nhóm" trong Query Parser Syntax documentation cung cấp câu trả lời:

(jakarta OR apache) AND website 

tôi nghi ngờ bạn nên thực hiện khai thác của bạn (and, or) chữ hoa. Đồng thời, tôi không nghĩ rằng bạn có thể sử dụng toán tử equals (sử dụng dấu hai chấm).

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

Cảm ơn bạn ... nó rất thành công giúp đỡ của bạn –

+0

bạn có thể đơn giản hóa nó để: 'nội dung: "một số thext" VÀ id :("A" OR "B" HOẶC "c") ' –

21
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

Có vẻ như' moduleFilter' nên được thay đổi thành 'idFilter'. Dù sao +1 cho câu trả lời. – RyuuGan

+3

Giải thích tôi thấy hữu ích (từ Occur javadocs): Đối với một mệnh đề BooleanQuery không có Occur.MUST, một hoặc nhiều mệnh đề Occur.SHOULD phải khớp với một tài liệu cho BooleanQuery để khớp. – Renaud

-1

BooleanQuery bị phản đối ngay bây giờ.

Cú pháp mới trông giống như thế này. (Nên == OR, phải == VÀ)

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() 
Các vấn đề liên quan