2013-11-25 40 views
8

Birden çok alana sahip bir dizinim var, bunlardan biri bir ürün için kategori adlarını depoladığım bir dize alanı ... gibi "Elektronik", "Ev", "Bahçe", vbLucene OR Boolean sorgusu kullanarak arama

new StringField("category_name", categoryName, Field.Store.YES)); //categoryName is a value such as "Electronics" 

ben isim, fiyat ve kategoriye göre ürünleri bulmak için bir Boole sorgu yapıyorum ama ben aynı anda iki kategorisi için sorgulayabilir, böylece bir OR arama yapmak nasıl emin değilim.

Bulunduğum sorgu şuna benzer:

String cat = "Electronics" 
TermQuery catQuery = new TermQuery(new Term("category_name", cat)); 
bq.add(new BooleanClause(catQuery, BooleanClause.Occur.MUST)); // where "bq" is the boolean query I am adding to, I tried .SHOULD but that didn't help either 

bu tek kategori arama için çalışıyor, ama iki kategoride olurdu "Elektronik YA Ev" aramak nasıl emin değilim.

+2

Ibear cevabı doğrudur, ancak okumak isteyebilirsiniz @ http://searchhub.org/dev/2011/12/28/why-not-and-or -ve-değil/Boole mantığı Lucene'de nasıl çalıştığını daha iyi anlamak için. – mindas

+0

@mindas, bağlantı için teşekkürler, aslında çok yardımcı olur. Bunu bir cevap olarak seçebilirdim, çünkü bu gerçekten faydalıdır. – SoluableNonagon

cevap

22

Sen gibi yazabilirsiniz:

BooleanQuery categoryQuery = new BooleanQuery(); 
TermQuery catQuery1 = new TermQuery(new Term("category_name", "Electronics")); 
TermQuery catQuery2 = new TermQuery(new Term("category_name", "Home")); 
categoryQuery.add(new BooleanClause(catQuery1, BooleanClause.Occur.SHOULD)); 
categoryQuery.add(new BooleanClause(catQuery2, BooleanClause.Occur.SHOULD)); 
bq.add(new BooleanClause(categoryQuery, BooleanClause.Occur.MUST)); 
+2

Keşke bu birden fazla oyu verebilseydim. Bu bir çekicilik gibi çalışır. – SoluableNonagon

+0

* Tam olarak ne gerekiyordu ve dokümanlar bulamadım. –

İlgili konular