bien, he buscado esto en las últimas dos horas con resultados que solo dan consejos, y ni siquiera un código completo para el rescate (cómo aprenderían noobs si no pueden ver algunos ? muestras)Lucene - buscando un campo de valor numérico
i han creado un índice de este modo:
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();
Ahora, quiero buscar el campo ID
Cuando el valor es igual a 0
(para obtener el registro único que tengo allí) ...
pero, una búsqueda simple como esta:
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);
devuelve ningún resultado. He leído sobre NumericRange
, KeywordAnalyzer
y algunas cosas más, pero dado que ninguno de ellos proporciona una muestra, no pude encontrar la manera de hacerlo.
por favor, personas amables, denme un ejemplo de cómo hacer que esto funcione.
Si solo está buscando una sola int, no necesita buscar por rango. Simplemente use esto: TermQuery query = new TermQuery (nuevo Término ("TaxonRankSortOrder", NumericUtils.IntToPrefixCoded (3000))); –