Exemplo n.º 1
0
            IEnumerable <SpanTermQuery> WildcardTerms(IEnumerable <Term> terms, IndexReader reader)
            {
                if (!HasWildcards)
                {
                    foreach (Term t in terms)
                    {
                        yield return(new SpanTermQuery(t));
                    }
                }
                else
                {
                    int maxTerms = 1000;
                    foreach (Term t in terms)
                    {
                        var termEnum = new WildcardTermEnum(reader, t);
                        var term     = termEnum.Term();
                        while (term != null)
                        {
                            if (--maxTerms < 0)
                            {
                                throw new Exception("Too many matches for wildcard query, please be more specific.");
                            }

                            yield return(new SpanTermQuery(term));

                            termEnum.Next();
                            term = termEnum.Term();
                        }
                    }
                }
            }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            RAMDirectory dir = new RAMDirectory();
            IndexWriter  iw  = new IndexWriter(dir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
            Document     d   = new Document();
            Field        f   = new Field("text", "This is some erfand erftyas poliot polioasd poliasdas data to test the wild card term enums. Lets see how it works out.", Field.Store.YES, Field.Index.ANALYZED);

            d.Add(f);
            iw.AddDocument(d);
            iw.Commit();
            IndexReader reader = iw.GetReader();
            QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "text", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30));
            // parser.MultiTermRewriteMethod = MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE;
            Query q  = parser.Parse("(poli* && erf*) && test* && (asd* || res*) && aterm");
            Query q2 = parser.Parse("poli*");
            //var rq = q.Rewrite(reader);
            //ISet<Term> terms = new HashSet<Term>();
            //rq.ExtractTerms(terms);
            List <PrefixQuery> prefixQueries = null;

            if (q is PrefixQuery)
            {
                prefixQueries = new List <PrefixQuery>();
                prefixQueries.Add(q as PrefixQuery);
            }
            else if (q is BooleanQuery)
            {
                prefixQueries = ExtractQueries(q as BooleanQuery);
            }
            foreach (var pq in prefixQueries)
            {
                WildcardTermEnum termEnum = new WildcardTermEnum(reader, new Term(pq.Prefix.Field, pq.Prefix.Text + "*"));
                if (termEnum.Term != null)
                {
                    Console.WriteLine(termEnum.Term.Text);
                }
                while (termEnum.Next())
                {
                    Console.WriteLine(termEnum.Term.Text);
                }
            }
            Console.ReadLine();
        }