2012-05-09 50 views
1

我有一個具有_IsPrivate字段的文檔的lucene索引。我需要查詢索引來檢索_IsPrivate == false或_IsPrivate == true和_Owner == me的所有文檔。我一直在嘗試以下Lucene的查詢,但我沒有得到預期的結果...具有字段依賴性的Lucene查詢

_IsPrivate:false OR (_IsPrivate:true AND _Owner:me) 

的結果是,我只得到我自己的(公立和私立)文件。

任何想法之一,我可以重寫我的查詢?

回答

3

我會使用「布爾查詢」來執行那種操作。您爲每個完整的搜索語句創建2個查詢,然後將它們與「SHOULD」運算符一起添加。

var bq = new BooleanQuery(); 
var bq1 = new BooleanQuery(); 
bg1.add(new Term("_IsPrivate", "false"), BooleanClause.Occur.MUST); 
var bq2 = new BooleanQuery(); 
bg2.add(new Term("_IsPrivate", "true"), BooleanClause.Occur.MUST); 
bg2.add(new Term("_Owner", "me"), BooleanClause.Occur.MUST); 
bq.add(bq1, BooleanClause.Occur.SHOULD); 
bq.add(bq2, BooleanClause.Occur.SHOULD); 

這可能有點麻煩,但我真的很喜歡這樣組織我的查詢。

希望它有幫助。

+0

+1我剛剛做了同樣的事情與新聞類別 - 一個高潮的父查詢與許多子查詢綁在一起SHOULD – al3xnull