2011-10-23 16 views
5

これは過去2時間以内に検索しました。結果は であり、救済のための完全なコードは1つもありません(どのようにnoobsが私はそうのようなインデックスを作成したサンプル)Lucene - 数値フィールドを検索する

:?

Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(Server.MapPath("/data/channels/"))); 
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29); 
IndexWriter writer = new IndexWriter(directory, analyzer, true, Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED); 
Document doc = new Document(); 
doc.Add(new Field("ID", "0", Field.Store.YES, Field.Index.NO)); 
doc.Add(new Field("parentID", "0", Field.Store.YES, Field.Index.NO)); 
doc.Add(new Field("Title", "Root", Field.Store.YES, Field.Index.ANALYZED)); 
writer.AddDocument(doc); 
writer.Optimize(); 
writer.Close(); 

、私は価値が0に等しいフィールドID(私が持っている単一のレコードを取得する)を検索したいです... 。

のような簡単な検索があります:

Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(Server.MapPath("/data/channels"))); 
Analyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(Version.LUCENE_29); 
Searcher searcher = new Lucene.Net.Search.IndexSearcher(IndexReader.Open(directory, true)); 
Query query = new Lucene.Net.QueryParsers.QueryParser(Version.LUCENE_29, "ID", analyzer).Parse("0"); 
Hits hits = searcher.Search(query); 

戻り値はありません。 私は約NumericRangeKeywordAnalyzerといくつかのもの、 を読んだことがありますが、それらのどれもサンプルを提供していないので、私はそれを行う方法を理解できませんでした。

してください、親切な人、私にこのことを動作させる方法の例を教えてください。 IDフィールドに

答えて

7

Field.Index.ANALYZED(またはField.Index.NOT_ANALYZED)に変更しField.Index.NO

9

私は数字のためのLuceneインデックスを検索しNumericFieldとNumericRangeQueryを使用しています。

インデックス作成:

NumericField taxonRankSortOrder = new NumericField("TaxonRankSortOrder", Field.Store.YES, true); 
    taxonRankSortOrder.SetIntValue(rank); 
    document.Add(taxonRankSortOrder); 

をし、クエリを使用して:

NumericRangeQuery query = NumericRangeQuery.NewIntRange("TaxonRankSortOrder", 3000, 3000, true, true); 

は、クエリを作成する必要が3000

に等しいTaxonRankSortOrderですべての文書を返します。 QueryParserを使用するのではなく、あなた自身がより良いアプローチがあるかどうかを知りたいと思うでしょう。

+4

ただ1つのintを検索する場合は、範囲で検索する必要はありません。 TermQuery query = new TermQuery(新しいTerm( "TaxonRankSortOrder"、NumericUtils.IntToPrefixCoded(3000))); –

関連する問題