Lucene - 搜索数值字段

时间:2011-10-23 13:21:06

标签: c# search lucene lucene.net

好的,我在过去两个小时内搜索过这个,结果只给出了提示, 甚至没有一个完整的代码来救援(如果他们看不到一些样品,小便会如何学习?)

我创建了一个像这样的索引:

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

拜托,亲切的人,给我一个如何让这件事有用的例子。

2 个答案:

答案 0 :(得分:9)

我使用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,所以我们也希望看看是否有更好的方法。

答案 1 :(得分:7)

在ID字段中将Field.Index.NO更改为Field.Index.ANALYZED(或Field.Index.NOT_ANALYZED