Lucene - 搜索数值类型字段

7

好的,我已经花了两个小时搜索与此相关的内容,但结果只给出了一些提示,却没有一个完整的代码来解决问题(对于新手而言,如果他们看不到一些示例,那么他们怎么能学习呢?)

我创建了一个索引,如下所示:

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个回答

10

我曾经使用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,因此很想看看是否有更好的方法。


5
如果你只是想搜索一个int类型的值,就不需要使用范围查询。可以直接使用以下代码: TermQuery query = new TermQuery(new Term("TaxonRankSortOrder", NumericUtils.IntToPrefixCoded(3000))); - Doug S

7

将ID字段的Field.Index.NO改为Field.Index.ANALYZED(或Field.Index.NOT_ANALYZED


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接