2017-01-24 4 views
0

Lucene.netベータ版を使用しています - Lucene.net 48. not likeのサポートを提供したいクエリーオブジェクトを使用するluceneを使用します。我々は、ワイルドカードサポートのためにWildcardQueryクラスを使用し、ブール値節を 'BooleanClause.Occur.MUST_NOT'として使用しています。MUST_NOT句はLucene.netのWildcardQueryで動作しません。 'Null'と 'Nullでない'句のバージョンとサポート

クエリ - >:"-company:lucene*"を生成しています。

クエリの前に ' - '記号がありますが、会社がlucene*のようなものではないデータは返されません。理想的には、それが働いているWildcardQueryMUSTで、他の方法でなど、

WildcardQuery qfWildcard = new WildcardQuery(new Term("company","lucene*")); 
BooleanQuery bq = new BooleanQuery(); 
bq.Add(qfWildcard, BooleanClause.Occur.MUST_NOT); 

を '弾性'、 'MongoDBの' 返す必要があります。

クエリ - >:"+company:lucene*"

クエリの前に '+'記号があり、会社が 'lucene *'のようなデータを返しています。これは、いずれかがWildcardQueryクラスまたは他のクラスや問題を解決するための任意の別の方法を使用してソリューションについて知っていれば、私を助けてください。「Luceneの」、「lucene.net」など

WildcardQuery qfWildcard = new WildcardQuery(new Term("company","lucene*")); 
BooleanQuery bq= new BooleanQuery(); 
bq.Add(qfWildcard, BooleanClause.Occur.MUST); 

を返しています。

私にも教えてください - 'Is Null' and 'Is Not Null'句をサポートする方法があれば教えてください。

+0

'Is Null'と 'Is Not Null'は、インデックスドキュメントにすべてのフィールドを格納することでサポートできます。しかし、私はsyntax/apiベースのフィールドがドキュメントに存在するかどうかを探しています。インデックス付きドキュメントにフィールドが存在しない場合、フィールドが 'null'であることを意味します。そして、フィールドがインデックス付きドキュメント手段に存在する場合、 'not null'です。 lucene.net 48バージョンでapi/classが見つかりませんでした。 –

答えて

1

MUST_NOT句のみを使用したクエリは機能しません。 MUST_NOT句はのみとなります。それは、一致してはならない文書を指定します。 にはと一致する文書は何も記載されておらず、ほかのすべての情報を取得することを意味するものではありません(further discussion here)。

BooleanQueryには常にSHOULDまたはMUST句が必要です。他のすべてと一致させるには、MatchAllDocsQueryを使用します。

WildcardQuery qfWildcard = new WildcardQuery(new Term("company","lucene*")); 
BooleanQuery bq = new BooleanQuery(); 
bq.Add(qfWildcard, BooleanClause.Occur.MUST_NOT); 
bq.Add(new MatchAllDocsQuery(), BooleanClause.Occur.SHOULD); 
関連する問題