2009-08-20 14 views
7

Lucene.Netの複数のフィールドでフィルタを実行するにはどうすればよいですか?一つのフィールドに私は単純に実行します。lucene.net複数のフィルタと検索語なしの組み合わせ

TermQuery tool = new TermQuery(new Term("Tool", "Nail")); 
Filter f = new QueryFilter(tool); 

私は今、私はそれを行うことができますどのように、フィルタに爪の長さを追加したい場合は?

また、ユーザーは検索語句を付けずに(つまりカテゴリを選択するだけで)検索できるようにしたいのですが、どうすればいいですか?

答えて

12

私は二つの質問を求めていると思います...

質問1:追加のフィルタを追加する

QueryFilter任意のクエリ(だけでなく、TermQuery)を受け入れ、覚えておいてください。したがって、フィルタリングする基準のBooleanQueryを作成することができます。

TermQuery toolQuery = new TermQuery(new Term("Tool", "Nail")); 
TermQuery nailLengthQuery = new TermQuery(new Term("NailLength", "3 inches")); 

BooleanQuery filterQuery = new BooleanQuery(); 
filterQuery.add(toolQuery, BooleanClause.Occur.MUST); 
filterQuery.add(nailLengthQuery, BooleanClause.Occur.MUST); 

Filter f = new QueryFilter(filterQuery); 

質問2:ユーザーが何も検索用語を提供していない場合は検索語のない

を検索すると、あなたがMatchAllDocsQueryクエリを使用して検索することができます。