Exemplo n.º 1
0
        public void testMissingTerms()
        {
            String fieldName = "field1";
            Directory rd = new RAMDirectory();
            var w = new IndexWriter(rd, new KeywordAnalyzer(), IndexWriter.MaxFieldLength.UNLIMITED);
            for (int i = 0; i < 100; i++)
            {
                var doc = new Document();
                int term = i*10; //terms are units of 10;
                doc.Add(new Field(fieldName, "" + term, Field.Store.YES, Field.Index.ANALYZED));
                w.AddDocument(doc);
            }
            IndexReader reader = w.GetReader();
            w.Close();

            TermsFilter tf = new TermsFilter();
            tf.AddTerm(new Term(fieldName, "19"));
            FixedBitSet bits = (FixedBitSet) tf.GetDocIdSet(reader);
            Assert.AreEqual(0, bits.Cardinality(), "Must match nothing");

            tf.AddTerm(new Term(fieldName, "20"));
            bits = (FixedBitSet) tf.GetDocIdSet(reader);
            Assert.AreEqual(1, bits.Cardinality(), "Must match 1");

            tf.AddTerm(new Term(fieldName, "10"));
            bits = (FixedBitSet) tf.GetDocIdSet(reader);
            Assert.AreEqual(2, bits.Cardinality(), "Must match 2");

            tf.AddTerm(new Term(fieldName, "00"));
            bits = (FixedBitSet) tf.GetDocIdSet(reader);
            Assert.AreEqual(2, bits.Cardinality(), "Must match 2");

            reader.Close();
            rd.Close();
        }
        public static Filter CreateTermsFilter(string fieldName, string value)
        {
            var query = new TermsFilter();

            query.AddTerm(new Term(fieldName, value));
            return(query);
        }
Exemplo n.º 3
0
        public void testCachability()
        {
            TermsFilter a = new TermsFilter();
            a.AddTerm(new Term("field1", "a"));
            a.AddTerm(new Term("field1", "b"));
            HashSet<Filter> cachedFilters = new HashSet<Filter>();
            cachedFilters.Add(a);
            TermsFilter b = new TermsFilter();
            b.AddTerm(new Term("field1", "a"));
            b.AddTerm(new Term("field1", "b"));

            Assert.True(cachedFilters.Contains(b), "Must be cached");
            b.AddTerm(new Term("field1", "a")); //duplicate term
            Assert.True(cachedFilters.Contains(b), "Must be cached");
            b.AddTerm(new Term("field1", "c"));
            Assert.False(cachedFilters.Contains(b), "Must not be cached");
        }
        /// <summary>
        ///     Creates the query.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="value">The value.</param>
        /// <returns></returns>
        public static Filter CreateQuery(string field, AttributeFilterValue value)
        {
            object val   = value.Value;
            var    query = new TermsFilter();

            query.AddTerm(new Term(field, ConvertToSearchable(val, false)));
            return(query);
        }
Exemplo n.º 5
0
        public void testCachability()
        {
            TermsFilter a = new TermsFilter();

            a.AddTerm(new Term("field1", "a"));
            a.AddTerm(new Term("field1", "b"));
            HashSet <Filter> cachedFilters = new HashSet <Filter>();

            cachedFilters.Add(a);
            TermsFilter b = new TermsFilter();

            b.AddTerm(new Term("field1", "a"));
            b.AddTerm(new Term("field1", "b"));

            Assert.True(cachedFilters.Contains(b), "Must be cached");
            b.AddTerm(new Term("field1", "a")); //duplicate term
            Assert.True(cachedFilters.Contains(b), "Must be cached");
            b.AddTerm(new Term("field1", "c"));
            Assert.False(cachedFilters.Contains(b), "Must not be cached");
        }
        private static TermsFilter CreateTermsFilter(string fieldName, IEnumerable <string> values)
        {
            var query = new TermsFilter();

            foreach (var value in values)
            {
                query.AddTerm(new Term(fieldName, value));
            }

            return(query);
        }
Exemplo n.º 7
0
        public void testMissingTerms()
        {
            String    fieldName = "field1";
            Directory rd        = new RAMDirectory();
            var       w         = new IndexWriter(rd, new KeywordAnalyzer(), IndexWriter.MaxFieldLength.UNLIMITED);

            for (int i = 0; i < 100; i++)
            {
                var doc  = new Document();
                int term = i * 10; //terms are units of 10;
                doc.Add(new Field(fieldName, "" + term, Field.Store.YES, Field.Index.ANALYZED));
                w.AddDocument(doc);
            }
            IndexReader reader = w.GetReader();

            w.Close();

            TermsFilter tf = new TermsFilter();

            tf.AddTerm(new Term(fieldName, "19"));
            FixedBitSet bits = (FixedBitSet)tf.GetDocIdSet(reader);

            Assert.AreEqual(0, bits.Cardinality(), "Must match nothing");

            tf.AddTerm(new Term(fieldName, "20"));
            bits = (FixedBitSet)tf.GetDocIdSet(reader);
            Assert.AreEqual(1, bits.Cardinality(), "Must match 1");

            tf.AddTerm(new Term(fieldName, "10"));
            bits = (FixedBitSet)tf.GetDocIdSet(reader);
            Assert.AreEqual(2, bits.Cardinality(), "Must match 2");

            tf.AddTerm(new Term(fieldName, "00"));
            bits = (FixedBitSet)tf.GetDocIdSet(reader);
            Assert.AreEqual(2, bits.Cardinality(), "Must match 2");

            reader.Close();
            rd.Close();
        }
        public override Filter MakeFilter(SpatialArgs args)
        {
            SpatialOperation op = args.Operation;
            if (op != SpatialOperation.Intersects)
                throw new UnsupportedSpatialOperation(op);

            Shape shape = args.Shape;
            int detailLevel = grid.GetLevelForDistance(args.ResolveDistErr(ctx, distErrPct));
            var cells = grid.GetNodes(shape, detailLevel, false);
            var filter = new TermsFilter();
            foreach (Node cell in cells)
            {
                filter.AddTerm(new Term(GetFieldName(), cell.GetTokenString()));
            }
            return filter;
        }
		public override Filter MakeFilter(SpatialArgs args)
		{
			SpatialOperation op = args.Operation;
			if (
				!SpatialOperation.Is(op, SpatialOperation.IsWithin, SpatialOperation.Intersects, SpatialOperation.BBoxWithin,
				                     SpatialOperation.BBoxIntersects))
				throw new UnsupportedSpatialOperation(op);

			Shape shape = args.GetShape();
			int detailLevel = grid.GetMaxLevelForPrecision(shape, args.GetDistPrecision());
			var cells = grid.GetNodes(shape, detailLevel, false);
			var filter = new TermsFilter();
			foreach (Node cell in cells)
			{
				filter.AddTerm(new Term(GetFieldName(), cell.GetTokenString()));
			}
			return filter;
		}
Exemplo n.º 10
0
        public static void Main(string[] args)
        {
            var directory = new RAMDirectory();
            var analyzer  = new KeywordAnalyzer();

            using (var writer = new IndexWriter(directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED)) {
                var users       = new [] { "Alfa", "Beta", "Gamma", "Delta" };
                var friendships = new Dictionary <String, String[]> {
                    { "Alfa", new [] { "Beta", "Gamma", "Delta" } },
                    { "Beta", new [] { "Gamma", "Delta" } },
                    { "Gamma", new [] { "Delta" } },
                    { "Delta", new String[0] }                             // Noone likes Delta.
                };
                foreach (var userName in users)
                {
                    var doc = new Document();
                    doc.Add(new Field("Name", userName, Field.Store.YES, Field.Index.NO));
                    foreach (var friendName in friendships[userName])
                    {
                        doc.Add(new Field("FriendsWith", friendName, Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS));
                    }
                    writer.AddDocument(doc);
                }
                writer.Commit();
            }
            // This should be the real query provided by the user (city, age, description, ...)
            var query = new MatchAllDocsQuery();
            // Create a filter limiting the result to those being friends with the current user,
            // in this example the user "Beta".
            var filter = new TermsFilter();

            filter.AddTerm(new Term("FriendsWith", "Gamma"));
            var reader   = IndexReader.Open(directory, readOnly: true);
            var searcher = new IndexSearcher(reader);
            var result   = searcher.Search(query, filter, 10);

            foreach (var topDoc in result.ScoreDocs)
            {
                var doc       = searcher.Doc(topDoc.Doc);
                var foundName = doc.Get("Name");
                Console.WriteLine("Matched user '{0}'", foundName);
            }
            Console.ReadLine();
        }
        public override Filter MakeFilter(SpatialArgs args)
        {
            SpatialOperation op = args.Operation;

            if (op != SpatialOperation.Intersects)
            {
                throw new UnsupportedSpatialOperation(op);
            }

            Shape shape       = args.Shape;
            int   detailLevel = grid.GetLevelForDistance(args.ResolveDistErr(ctx, distErrPct));
            var   cells       = grid.GetNodes(shape, detailLevel, false);
            var   filter      = new TermsFilter();

            foreach (Node cell in cells)
            {
                filter.AddTerm(new Term(GetFieldName(), cell.GetTokenString()));
            }
            return(filter);
        }
Exemplo n.º 12
0
 /// <summary>
 ///     Creates the query.
 /// </summary>
 /// <param name="field">The field.</param>
 /// <param name="value">The value.</param>
 /// <returns></returns>
 public static Filter CreateQuery(string field, AttributeFilterValue value)
 {
     object val = value.Value;
     var query = new TermsFilter();
     query.AddTerm(new Term(field, ConvertToSearchable(val)));
     return query;
 }
Exemplo n.º 13
0
        public List<ResourceNode> Search(string term, bool isResourceDocs, bool isProcurement, bool isCatalog)
        {
            try
            {
                if(String.IsNullOrWhiteSpace(term))
                    return new List<ResourceNode>();
                Query query = multiParser.Parse(term);
           
                TopDocs docs = null;

                TermsFilter filter = new TermsFilter();
                Boolean isFilter = true;
                if (isProcurement)
                {
                    filter.AddTerm(new Term(FieldNames.RESOURCE_TYPE, ResourceTypeEnum.Procurement_Language.ToString()));
                }
                if (isCatalog)
                {
                    filter.AddTerm(new Term(FieldNames.RESOURCE_TYPE, ResourceTypeEnum.Catalog_Recommendation.ToString()));
                }
                if (isResourceDocs)
                {
                    filter.AddTerm(new Term(FieldNames.RESOURCE_TYPE, ResourceTypeEnum.Resource_Doc.ToString()));
                }
             
                if(isFilter)
                   docs =  searcher.Search(query,filter,20);
                else
                   docs = searcher.Search(query, 20);
               
               
                List<ResourceNode> listResourceDocuments = new List<ResourceNode>();
              
                foreach (ScoreDoc doc in docs.ScoreDocs)
                {
                    int lucDocId = doc.Doc;                   

                    Document lucDoc = searcher.Doc(lucDocId);
                    string sDocId = lucDoc.Get(FieldNames.DOC_ID);

                    int docId = 0;
                    if (sDocId != null)
                        docId = Int32.Parse(sDocId);
                    else
                    {
                        docId = -1;
                    }
                   
                    string resourceType = lucDoc.Get(FieldNames.RESOURCE_TYPE);
                    ResourceTypeEnum resourceTypeEnum = (ResourceTypeEnum)Enum.Parse(typeof(ResourceTypeEnum), resourceType, true);
                    ResourceNode resDoc = GetDoc(docId, resourceTypeEnum);
                    if(resDoc != null)
                        listResourceDocuments.Add(resDoc);
                }
                return listResourceDocuments;
            }
            catch(Exception ex)
            {
                //May get exceptions if put symbols and other wierd things in search.  So then just return an empty list in that case.
                //CSETLogger.Fatal("An exception occurred in finding items in search.", ex);
                return new List<ResourceNode>();           
            }

 
        }