Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Lucene-搜索数值字段_C#_Search_Lucene_Lucene.net - Fatal编程技术网

C# Lucene-搜索数值字段

C# Lucene-搜索数值字段,c#,search,lucene,lucene.net,C#,Search,Lucene,Lucene.net,好的,我在过去的两个小时里搜索了这个,结果只给出了作者的提示, 甚至连一个完整的代码都没有(如果看不到一些示例,noobs会如何学习?) 我创建了如下索引: Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(Server.MapPath("/data/channels/"))); Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29); IndexW

好的,我在过去的两个小时里搜索了这个,结果只给出了作者的提示, 甚至连一个完整的代码都没有(如果看不到一些示例,noobs会如何学习?)

我创建了如下索引:

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);
不返回任何结果。 我读过关于
numeriRange
KeywordAnalyzer
和其他一些东西, 但是,由于没有一个提供了一个样本,我不知道如何做到这一点


善良的人们,请给我一个例子,说明如何使这件事起作用。

Field.Index.NO
更改为
Field.Index.ANALYZED
(或
Field.Index.NOT_ANALYZED
)在ID Field

中,我使用NumericField和numericangequery来搜索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,因此您很想知道是否有更好的方法。

如果您只是搜索单个int,则不需要按范围搜索。只需使用以下命令:TermQuery query=newtermquery(new Term(“TaxonRankSortOrder”,NumericUtils.IntToPrefixCoded(3000));