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(); 

现在,我想搜索字段ID其中值等于0 (以获得我在那里的单个记录)….

但是,这样的简单搜索:

 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等等,但由于它们都没有提供样本我无法弄清楚如何去做。

请亲切的人,给我一个如何使这个东西工作的例子。

在Field字段Field.Index.NOT_ANALYZED更改为Field.Index.ANALYZED (或Field.Index.NOT_ANALYZED

我使用NumericField和NumericRangeQuery来搜索Lucene索引的数字。

创建索引时:

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

然后使用查询:

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

将使用TaxonRankSortOrder等于3000返回所有文档。

您必须自己创建查询,而不是使用QueryParser,因此很想知道是否有更好的方法。