public static IEnumerable<TextValue> GetAllValuesAsListDistinct(List<Metadata> metadataList) { List<TextValue> l = new List<TextValue>(); // gehe alle Metadaten druch foreach (Metadata m in metadataList) { // gehe alle Values in Metadata durch foreach (string s in (m.GetAllValuesAsList())) { //split strings to single words Array a = s.Split(new Char[] { ' ' }); if (a.Length > 1) { foreach (string astring in a) { bool isIn = false; // prüfe ob string schon in List foreach (TextValue s2 in l) { if (astring == s2.Value) isIn = true; } if (isIn == false) { //jedes wort wird eingefügt TextValue tv = new TextValue(); tv.Name = astring; tv.Value = astring; l.Add(tv); }; //kompletter string wird eingefügt } } bool isInList = false; // prüfe ob string schon in List foreach (TextValue s2 in l) { if (s == s2.Value) isInList = true; } if (isInList == false) { TextValue tv = new TextValue(); tv.Name = s; tv.Value = s; l.Add(tv); } } } return l; }
/// <summary> /// /// </summary> /// <remarks></remarks> /// <seealso cref=""/> /// <param name="origQuery"></param> /// <param name="queryFilter"></param> /// <param name="searchtext"></param> /// <returns></returns> public static IEnumerable<TextValue> doTextSearch(Query origQuery, String queryFilter, String searchtext) { String filter = queryFilter; BooleanQuery query = new BooleanQuery(); query.Add(origQuery, Occur.MUST); if (!filter.ToLower().StartsWith("ng_")) { filter = "ng_" + filter; } if (filter.ToLower().Equals("ng_all")) { filter = "ng_all"; queryFilter = "ng_all"; } HashSet<string> uniqueText = new HashSet<string>(); searchtext = searchtext.ToLower(); QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, filter, new KeywordAnalyzer()); parser.DefaultOperator = QueryParser.Operator.AND; Query X1 = parser.Parse(searchtext); query.Add(X1, Occur.MUST); // Query query = parser.Parse("tree data"); TopDocs tds = searcher.Search(query, 50); QueryScorer scorer = new QueryScorer(query, searchtext); Analyzer analyzer = new NGramAnalyzer(); List<TextValue> autoCompleteTextList = new List<TextValue>(); foreach (ScoreDoc sd in tds.ScoreDocs) { Document doc = searcher.Doc(sd.Doc); String docId = doc.GetField("doc_id").StringValue; TermQuery q1 = new TermQuery(new Term("id", docId.ToLower())); TermQuery q0 = new TermQuery(new Term("field", queryFilter.ToLower())); QueryParser parser1 = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "value", new KeywordAnalyzer()); parser1.DefaultOperator = QueryParser.Operator.AND; Query q2 = parser1.Parse(searchtext); BooleanQuery q3 = new BooleanQuery(); q3.Add(q1, Occur.MUST); q3.Add(q2, Occur.MUST); q3.Add(q0, Occur.MUST); TopDocs tdAutoComp = autoCompleteSearcher.Search(q3, 100); foreach (ScoreDoc sdAutoComp in tdAutoComp.ScoreDocs) { Document docAutoComp = autoCompleteSearcher.Doc(sdAutoComp.Doc); String toAdd = docAutoComp.GetField("value").StringValue; if (!uniqueText.Contains(toAdd)) { TextValue tv = new TextValue(); tv.Name = toAdd; tv.Value = toAdd; autoCompleteTextList.Add(tv); uniqueText.Add(toAdd); } } if (autoCompleteTextList.Count > 7) break; } return autoCompleteTextList; }
public static IEnumerable<TextValue> GetAllTextValuesByNodeDistinct(string nodeName, List<Metadata> metadataList) { List<TextValue> l = new List<TextValue>(); foreach (Metadata m in metadataList) { foreach (XmlNode x in m.GetValueFromNode(nodeName)) { bool isIn = false; foreach (TextValue s in l) { if (x.InnerText == s.Value) isIn = true; } if(isIn == false){ TextValue tv = new TextValue(); tv.Name = x.InnerText; tv.Value=x.InnerText; l.Add(tv); }; //l.Add(x.InnerText); } } return l; }