Exemple #1
0
        /// <summary> <p>
        /// Parses a query, searching on the fields specified.
        /// Use this if you need to specify certain fields as required,
        /// and others as prohibited.
        /// <p><pre>
        /// Usage:
        /// <code>
        /// String[] fields = {"filename", "contents", "description"};
        /// int[] flags = {MultiFieldQueryParser.NORMAL FIELD,
        /// MultiFieldQueryParser.REQUIRED FIELD,
        /// MultiFieldQueryParser.PROHIBITED FIELD,};
        /// parse(query, fields, flags, analyzer);
        /// </code>
        /// </pre>
        /// <p>
        /// The code above would construct a query:
        /// <pre>
        /// <code>
        /// (filename:query) +(contents:query) -(description:query)
        /// </code>
        /// </pre>
        ///
        /// </summary>
        /// <param name="query">Query string to parse
        /// </param>
        /// <param name="fields">Fields to search on
        /// </param>
        /// <param name="flags">Flags describing the fields
        /// </param>
        /// <param name="analyzer">Analyzer to use
        /// </param>
        /// <throws>  ParseException if query parsing fails </throws>
        /// <throws>  TokenMgrError if query parsing fails </throws>
        public static Query Parse(System.String query, System.String[] fields, int[] flags, Analyzer analyzer)
        {
            BooleanQuery bQuery = new BooleanQuery();

            for (int i = 0; i < fields.Length; i++)
            {
                Query q    = Parse(query, fields[i], analyzer);
                int   flag = flags[i];
                switch (flag)
                {
                case REQUIRED_FIELD:
                    bQuery.Add(q, true, false);
                    break;

                case PROHIBITED_FIELD:
                    bQuery.Add(q, false, true);
                    break;

                default:
                    bQuery.Add(q, false, false);
                    break;
                }
            }
            return(bQuery);
        }
Exemple #2
0
        /// <summary> <p>
        /// Parses a query which searches on the fields specified.
        /// <p>
        /// If x fields are specified, this effectively constructs:
        /// <pre>
        /// <code>
        /// (field1:query) (field2:query) (field3:query)...(fieldx:query)
        /// </code>
        /// </pre>
        ///
        /// </summary>
        /// <param name="query">Query string to parse
        /// </param>
        /// <param name="fields">Fields to search on
        /// </param>
        /// <param name="analyzer">Analyzer to use
        /// </param>
        /// <throws>  ParseException if query parsing fails </throws>
        /// <throws>  TokenMgrError if query parsing fails </throws>
        public static Query Parse(System.String query, System.String[] fields, Analyzer analyzer)
        {
            BooleanQuery bQuery = new BooleanQuery();

            for (int i = 0; i < fields.Length; i++)
            {
                Query q = Parse(query, fields[i], analyzer);
                bQuery.Add(q, false, false);
            }
            return(bQuery);
        }
Exemple #3
0
 public abstract Monodoc.Lucene.Net.Search.TopDocs Search(Monodoc.Lucene.Net.Search.Query param1, Monodoc.Lucene.Net.Search.Filter param2, int param3);
Exemple #4
0
 public abstract Monodoc.Lucene.Net.Search.Query Rewrite(Monodoc.Lucene.Net.Search.Query param1);
Exemple #5
0
 public abstract void  Search(Monodoc.Lucene.Net.Search.Query param1, Monodoc.Lucene.Net.Search.Filter param2, Monodoc.Lucene.Net.Search.HitCollector param3);
Exemple #6
0
 public abstract Monodoc.Lucene.Net.Search.TopFieldDocs Search(Monodoc.Lucene.Net.Search.Query param1, Monodoc.Lucene.Net.Search.Filter param2, int param3, Monodoc.Lucene.Net.Search.Sort param4);
Exemple #7
0
 public abstract Monodoc.Lucene.Net.Search.Explanation Explain(Monodoc.Lucene.Net.Search.Query param1, int param2);
        public virtual Explanation Explain(Monodoc.Lucene.Net.Index.IndexReader reader, int doc)
        {
            Explanation result = new Explanation();

            result.SetDescription("weight(" + Query + " in " + doc + "), product of:");
            System.String field = ((SpanQuery)Query).GetField();

            System.Text.StringBuilder      docFreqs = new System.Text.StringBuilder();
            System.Collections.IEnumerator i        = terms.GetEnumerator();
            while (i.MoveNext())
            {
                Term term = (Term)i.Current;
                docFreqs.Append(term.Text());
                docFreqs.Append("=");
                docFreqs.Append(searcher.DocFreq(term));

                if (i.MoveNext())
                {
                    docFreqs.Append(" ");
                }
            }

            Explanation idfExpl = new Explanation(idf, "idf(" + field + ": " + docFreqs + ")");

            // explain query weight
            Explanation queryExpl = new Explanation();

            queryExpl.SetDescription("queryWeight(" + Query + "), product of:");

            Explanation boostExpl = new Explanation(Query.GetBoost(), "boost");

            if (Query.GetBoost() != 1.0f)
            {
                queryExpl.AddDetail(boostExpl);
            }
            queryExpl.AddDetail(idfExpl);

            Explanation queryNormExpl = new Explanation(queryNorm, "queryNorm");

            queryExpl.AddDetail(queryNormExpl);

            queryExpl.SetValue(boostExpl.GetValue() * idfExpl.GetValue() * queryNormExpl.GetValue());

            result.AddDetail(queryExpl);

            // explain Field weight
            Explanation fieldExpl = new Explanation();

            fieldExpl.SetDescription("fieldWeight(" + field + ":" + query.ToString(field) + " in " + doc + "), product of:");

            Explanation tfExpl = Scorer(reader).Explain(doc);

            fieldExpl.AddDetail(tfExpl);
            fieldExpl.AddDetail(idfExpl);

            Explanation fieldNormExpl = new Explanation();

            byte[] fieldNorms = reader.Norms(field);
            float  fieldNorm  = fieldNorms != null?Similarity.DecodeNorm(fieldNorms[doc]) : 0.0f;

            fieldNormExpl.SetValue(fieldNorm);
            fieldNormExpl.SetDescription("fieldNorm(Field=" + field + ", doc=" + doc + ")");
            fieldExpl.AddDetail(fieldNormExpl);

            fieldExpl.SetValue(tfExpl.GetValue() * idfExpl.GetValue() * fieldNormExpl.GetValue());

            result.AddDetail(fieldExpl);

            // combine them
            result.SetValue(queryExpl.GetValue() * fieldExpl.GetValue());

            if (queryExpl.GetValue() == 1.0f)
            {
                return(fieldExpl);
            }

            return(result);
        }