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); }
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); }
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); }
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; }
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); }
/// <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; }
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>(); } }