2016-06-23 7 views
0

なぜTopTabId = 1027とContentPlainRemaded = Wordのドキュメントが存在するのですか?LUCENE.NETが2つで検索していないAND

{+TopTabId:1027 +ContentPlainRemaded:Word*} 

このクエリでは、作業していて、その後、必要に応じて複数のレコードを返します:

{TopTabId:1027 +ContentPlainRemaded:Word*} 

は、コードを動作していない:

Query query1; 
BooleanQuery querySearch = new BooleanQuery() 
query1 = ((new QueryParser(VersionsToUse, "TopTabId",  Analyzer)).Parse("1027")); 
querySearch.Add(new BooleanClause(query1, Occur.MUST)); 
query1 = ((new QueryParser(VersionsToUse, "ContentPlainRemaded", Analyzer)).Parse("WORD")); 
querySearch.Add(query1, Occur.MUST); 

using (IndexSearcher searcher = new IndexSearcher(SearchIndexDirectory, true)) 
{ 
    var docs = searcher.Search(querySearch, 100); 
    ................................. 
} 

LUCENE.NET 3.0.3

TopTabIDがあります文字列タイプ: ldoc.Add(new Field("TopTabId", doc.TopTabId.ToString(), Field.Store.YES, Field.Index.ANALYZED));

私はNumericRangeQueryを試しましたが、依然として0の結果を返します。

私はこの問題は、(0の結果を返します)、これは動作していないので、TopTabIdではないと思う:{+ContentPlainRemaded:Word* +ContentPlainRemaded:Word*}

+0

あなたの結果を確認することはできますか? 'TopTabId:1027 + ContentPlainRemaded:Word *'いくつかの結果が得られましたが、 '+ ContentPlainRemaded:Word * + ContentPlainRemaded:Word *'(または実質的に同等の '+ ContentPlainRemaded:Word *')それを実行する前にクエリを印刷して、期待どおりに見えるようにしてください。 – femtoRgon

+0

2つのAND(+)要素を追加したときに作業しません。彼らは働いています: '+ ContentPlainRemaded:Word *'、 '+ TopTabId:1027'彼らは働いていません:' + ContentPlainRemaded:Word * + ContentPlainRemaded:Word * '' + TopTabId:1027 + ContentPlainRemaded:Word * ' – user3093010

+0

働いているものとそうでないものを正確に説明していない。 '+ TopTabId:1027 + ContentPlainRemaded:Word *'が '+ ContentPlainRemaded:Word *、+ TopTabId:1027'とは異なる結果を得ていると言っていますか?それらはluceneのクエリ構文の* same *式なので、あなたが意味するものを理解するのは難しいです。それぞれのクエリを別々に実行しようとしましたか(つまり、ブールクエリを完全にカットしましたか)。 – femtoRgon

答えて

1

私は「TopTabIdは」数値フィールドとして索引付けされている疑いがあります。通常、QueryParseは数値フィールドを処理しません。 2つのオプションがあります。

  • TopTabIdを非数値フィールドに変更します。これは、フィールドがID番号などの場合は、しばしば最良の選択です。実数ではなく、数字の列です。一般的に、それをソートしたり、範囲クエリを実行したりしない場合は、数値フィールドである必要はないでしょう。

  • は、そのフィールドに照会するNumericRangeQueryを使用します。

BooleanQuery querySearch = new BooleanQuery() 
    Query query1 = NumericRangeQuery.newIntRange("TopTabId", 1027, 1027, true, true); 
    querySearch.Add(new BooleanClause(query1, Occur.MUST)); 
    Query query2 = new QueryParser(VersionsToUse, "ContentPlainRemaded", Analyzer).Parse("WORD"); 
    querySearch.Add(new BooleanClause(query2, Occur.MUST)); 
+0

私はtommorowをチェックします。今日は私はカント:( – user3093010

+0

遅く応答して申し訳ありません。私は編集した質問 – user3093010

関連する問題