示例#1
0
        /// <summary> Constructs a filter for field <code>f</code> matching times
        /// on or before <code>time</code>.
        /// </summary>
        public static DateFilter Before(System.String field, long time)
        {
            DateFilter result = new DateFilter(field);

            result.end = DateField.TimeToString(time);
            return(result);
        }
示例#2
0
 /// <summary> Constructs a filter for field <code>f</code> matching times
 /// between <code>from</code> and <code>to</code> inclusively.
 /// </summary>
 public DateFilter(System.String f, long from, long to)
 {
     InitBlock();
     field = f;
     start = DateField.TimeToString(from);
     end   = DateField.TimeToString(to);
 }
示例#3
0
        /// <summary> Constructs a filter for field <code>f</code> matching
        /// times on or after <code>time</code>.
        /// </summary>
        public static DateFilter After(System.String field, long time)
        {
            DateFilter result = new DateFilter(field);

            result.start = DateField.TimeToString(time);
            return(result);
        }
示例#4
0
        public virtual void  TestAfter()
        {
            // create an index
            RAMDirectory indexStore = new RAMDirectory();
            IndexWriter  writer     = new IndexWriter(indexStore, new SimpleAnalyzer(), true);

            long now = (System.DateTime.Now.Ticks - 621355968000000000) / 10000;

            Document doc = new Document();

            // add time that is in the future
            doc.Add(Field.Keyword("datefield", DateField.TimeToString(now + 888888)));
            doc.Add(Field.Text("body", "Today is a very sunny day in New York City"));
            writer.AddDocument(doc);
            writer.Optimize();
            writer.Close();

            IndexSearcher searcher = new IndexSearcher(indexStore);

            // filter that should preserve matches
            DateFilter df1 = DateFilter.After("datefield", now);

            // filter that should discard matches
            DateFilter df2 = DateFilter.After("datefield", now + 999999);

            // search something that doesn't exist with DateFilter
            Query query1 = new TermQuery(new Term("body", "NoMatchForThis"));

            // search for something that does exists
            Query query2 = new TermQuery(new Term("body", "sunny"));

            Hits result;

            // ensure that queries return expected results without DateFilter first
            result = searcher.Search(query1);
            Assert.AreEqual(0, result.Length());

            result = searcher.Search(query2);
            Assert.AreEqual(1, result.Length());


            // run queries with DateFilter
            result = searcher.Search(query1, df1);
            Assert.AreEqual(0, result.Length());

            result = searcher.Search(query1, df2);
            Assert.AreEqual(0, result.Length());

            result = searcher.Search(query2, df1);
            Assert.AreEqual(1, result.Length());

            result = searcher.Search(query2, df2);
            Assert.AreEqual(0, result.Length());
        }
示例#5
0
        /// <summary>Makes a document for a File.
        /// <p>
        /// The document has three fields:
        /// <ul>
        /// <li><code>path</code>--containing the pathname of the file, as a stored,
        /// tokenized Field;
        /// <li><code>modified</code>--containing the last modified date of the file as
        /// a keyword Field as encoded by <a
        /// href="lucene.document.DateField.html">DateField</a>; and
        /// <li><code>contents</code>--containing the full contents of the file, as a
        /// Reader Field;
        /// </summary>
        public static Document Document(System.IO.FileInfo f)
        {
            // make a new, empty document
            Document doc = new Document();

            // Add the path of the file as a Field named "path".  Use a Text Field, so
            // that the index stores the path, and so that the path is searchable
            doc.Add(Field.Text("path", f.FullName));

            // Add the last modified date of the file a Field named "modified".  Use a
            // Keyword Field, so that it's searchable, but so that no attempt is made
            // to tokenize the Field into words.
            doc.Add(Field.Keyword("modified", DateField.TimeToString(((f.LastWriteTime.Ticks - 621355968000000000) / 10000))));

            // Add the contents of the file a Field named "contents".  Use a Text
            // Field, specifying a Reader, so that the text of the file is tokenized.
            // ?? why doesn't FileReader work here ??
            System.IO.FileStream   is_Renamed = new System.IO.FileStream(f.FullName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
            System.IO.StreamReader reader     = new System.IO.StreamReader(new System.IO.StreamReader(is_Renamed, System.Text.Encoding.Default).BaseStream, new System.IO.StreamReader(is_Renamed, System.Text.Encoding.Default).CurrentEncoding);
            doc.Add(Field.Text("contents", reader));

            // return the document
            return(doc);
        }