public IEnumerable <KeyWord> search(IBox box, String str) { char[] cs = sUtil.clear(str); List <KeyWord> map = util.fromString(-1, cs, false); sUtil.correctInput(map); if (map.Count > KeyWord.MAX_WORD_LENGTH || map.Count == 0) { return(new List <KeyWord> ()); } List <KeyWord> kws = new List <KeyWord> (); for (int i = 0; i < map.Count; i++) { KeyWord kw = map [i]; if (kw is KeyWordE) { String s = kw.KWord.ToString(); if ((s.Length > 2) && (!sUtil.mvends.Contains(s))) { kws.Add(kw); map [i] = null; } } else { KeyWordN kwn = (KeyWordN)kw; if (kwn.size() >= 2) { kws.Add(kw); map [i] = null; } else if (kws.Count > 0) { KeyWord p = kws [kws.Count - 1]; if (p is KeyWordN) { if (kwn.Position == (p.Position + ((KeyWordN)p).size())) { kws.Add(kw); map [i] = null; } } } } } for (int i = 0; i < map.Count; i++) { KeyWord kw = map [i]; if (kw != null) { kws.Add(kw); } } MaxID maxId = new MaxID(this.maxSearchTime); return(search(box, kws.ToArray(), maxId)); }
private IEnumerable <KeyWord> search(IBox box, KeyWord[] kws, MaxID maxId) { if (kws.Length == 1) { return(search(box, kws[0], (KeyWord)null, maxId)); } return(search(box, kws[kws.Length - 1], search(box, Arrays.copyOf(kws, kws.Length - 1), maxId), maxId)); }
/// <summary> /// Common code for building parameter list for both sent by and sent to urls. /// </summary> /// <param name="parameters">parameters to add</param> /// <param name="url">url to start with</param> /// <returns>new url with parameters</returns> Request BuildSentUrlParameters(Dictionary <string, string> parameters, string url) { var req = new Request(BaseUrl + url); IList <QueryParameter> urlParams = req.RequestParameters; if (parameters == null) { return(req); } if (parameters.ContainsKey("SinceID")) { SinceID = ulong.Parse(parameters["SinceID"]); urlParams.Add(new QueryParameter("since_id", SinceID.ToString(CultureInfo.InvariantCulture))); } if (parameters.ContainsKey("MaxID")) { MaxID = ulong.Parse(parameters["MaxID"]); urlParams.Add(new QueryParameter("max_id", MaxID.ToString(CultureInfo.InvariantCulture))); } if (parameters.ContainsKey("Page")) { Page = int.Parse(parameters["Page"]); urlParams.Add(new QueryParameter("page", Page.ToString(CultureInfo.InvariantCulture))); } if (parameters.ContainsKey("Count")) { Count = int.Parse(parameters["Count"]); urlParams.Add(new QueryParameter("count", Count.ToString(CultureInfo.InvariantCulture))); } if (parameters.ContainsKey("IncludeEntities")) { IncludeEntities = bool.Parse(parameters["IncludeEntities"]); urlParams.Add(new QueryParameter("include_entities", parameters["IncludeEntities"].ToLower())); } if (parameters.ContainsKey("SkipStatus")) { SkipStatus = bool.Parse(parameters["SkipStatus"]); urlParams.Add(new QueryParameter("skip_status", SkipStatus.ToString().ToLower())); } if (parameters.ContainsKey("FullText")) { FullText = bool.Parse(parameters["FullText"]); urlParams.Add(new QueryParameter("full_text", parameters["FullText"].ToLower())); } return(req); }
private IEnumerable <KeyWord> search(IBox box, KeyWord nw, IEnumerable <KeyWord> condition, MaxID maxId) { IEnumerator <KeyWord> cd = condition.GetEnumerator(); IEnumerator <KeyWord> r1 = null; KeyWord r1_con = null; long r1_id = -1; return(new Iterable <KeyWord>() { iterator = new EngineIterator <KeyWord>() { hasNext = () => { if (r1 != null && r1.MoveNext()) { return true; } while (cd.MoveNext()) { r1_con = cd.Current; if (r1_id == r1_con.getID()) { continue; } if (!nw.isLinked) { r1_id = r1_con.getID(); } r1 = search(box, nw, r1_con, maxId).GetEnumerator(); if (r1.MoveNext()) { return true; } } return false; }, next = () => { KeyWord k = r1.Current; k.previous = r1_con; return k; } } }); }
public IEnumerable <KeyWord> search(IBox box, String str, long startId) { if (startId < 0) { return(new ArrayList <KeyWord>()); } char[] cs = sUtil.clear(str); ArrayList <KeyWord> map = sUtil.fromString(-1, cs, false); if (map.size() > KeyWord.MAX_WORD_LENGTH || map.isEmpty()) { return(new ArrayList <KeyWord>()); } MaxID maxId = new MaxID(); maxId.id = startId; return(search(box, map.ToArray(), maxId)); }
private IEnumerable <KeyWord> search(IBox box, KeyWord[] kws, MaxID maxId) { if (kws.Length == 1) { return(search(box, kws [0], (KeyWord)null, false, maxId)); } bool asWord = true; KeyWord kwa = kws [kws.Length - 2]; KeyWord kwb = kws [kws.Length - 1]; if ((kwa is KeyWordN) && (kwb is KeyWordN)) { asWord = kwb.Position != (kwa.Position + ((KeyWordN)kwa).size()); } KeyWord[] condition = new KeyWord[kws.Length - 1]; Array.Copy(kws, 0, condition, 0, condition.Length); return(search(box, kws [kws.Length - 1], search(box, condition, maxId), asWord, maxId)); }
private static IEnumerable <KeyWord> search(IBox box, KeyWord kw, KeyWord con, MaxID maxId) { String ql = kw is KeyWordE ? "from /E where K==? & I<=?" : "from /N where K==? & I<=?"; int linkPos = kw.isLinked ? (con.getPosition() + con.size() + (kw is KeyWordE ? 1 : 0)) : -1; long currentMaxId = long.MaxValue; KeyWord cache = null; IEnumerator <KeyWord> iter = null; bool isLinkEndMet = false; return(new Iterable <KeyWord>() { iterator = new EngineIterator <KeyWord>() { hasNext = () => { if (maxId.id == -1) { return false; } if (currentMaxId > (maxId.id + 1)) { currentMaxId = maxId.id; iter = kw is KeyWordE ? (IEnumerator <KeyWord>)box.Select <KeyWordE>(ql, kw.getKeyWord(), maxId.id).GetEnumerator() : box.Select <KeyWordN>(ql, kw.getKeyWord(), maxId.id).GetEnumerator(); } while (iter.MoveNext()) { cache = iter.Current; maxId.id = cache.getID(); currentMaxId = maxId.id; if (con != null && con.I != maxId.id) { return false; } if (isLinkEndMet) { continue; } if (linkPos == -1) { return true; } int cpos = cache.getPosition(); if (cpos > linkPos) { continue; } if (cpos == linkPos) { if (kw.isLinkedEnd) { isLinkEndMet = true; } return true; } return false; } maxId.id = -1; return false; }, next = () => { return cache; } } }); }
/// <summary> /// appends parameters for Search request /// </summary> /// <param name="parameters">list of parameters from expression tree</param> /// <param name="url">base url</param> /// <returns>base url + parameters</returns> private Request BuildSearchUrlParameters(Dictionary <string, string> parameters, string url) { var req = new Request(BaseUrl + url); var urlParams = req.RequestParameters; if (parameters.ContainsKey("Query") && !string.IsNullOrWhiteSpace(parameters["Query"])) { Query = parameters["Query"]; urlParams.Add(new QueryParameter("q", Query)); } else { throw new ArgumentNullException("Query", "Query filter in where clause is required."); } if (parameters.ContainsKey("GeoCode")) { GeoCode = parameters["GeoCode"]; urlParams.Add(new QueryParameter("geocode", GeoCode)); } if (parameters.ContainsKey("SearchLanguage")) { SearchLanguage = parameters["SearchLanguage"]; urlParams.Add(new QueryParameter("lang", SearchLanguage)); } if (parameters.ContainsKey("Locale")) { Locale = parameters["Locale"]; urlParams.Add(new QueryParameter("locale", Locale)); } if (parameters.ContainsKey("Count")) { Count = int.Parse(parameters["Count"]); urlParams.Add(new QueryParameter("count", Count.ToString(CultureInfo.InvariantCulture))); } if (parameters.ContainsKey("Until")) { Until = DateTime.Parse(parameters["Until"]).Date; urlParams.Add(new QueryParameter("until", Until.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture))); } if (parameters.ContainsKey("SinceID")) { SinceID = ulong.Parse(parameters["SinceID"]); urlParams.Add(new QueryParameter("since_id", SinceID.ToString(CultureInfo.InvariantCulture))); } if (parameters.ContainsKey("MaxID")) { MaxID = ulong.Parse(parameters["MaxID"]); urlParams.Add(new QueryParameter("max_id", MaxID.ToString(CultureInfo.InvariantCulture))); } if (parameters.ContainsKey("ResultType")) { ResultType = RequestProcessorHelper.ParseEnum <ResultType>(parameters["ResultType"]); urlParams.Add(new QueryParameter("result_type", ResultType.ToString().ToLower())); } if (parameters.ContainsKey("IncludeEntities")) { IncludeEntities = bool.Parse(parameters["IncludeEntities"]); urlParams.Add(new QueryParameter("include_entities", parameters["IncludeEntities"].ToLower())); } if (parameters.ContainsKey(nameof(TweetMode))) { TweetMode = RequestProcessorHelper.ParseEnum <TweetMode>(parameters[nameof(TweetMode)]); urlParams.Add(new QueryParameter("tweet_mode", TweetMode.ToString().ToLower())); } return(req); }
internal Index2KeyWordIterable(IEnumerable <Object> findex, IBox box, KeyWord kw, KeyWord con, bool asWord, MaxID maxId) { this.index = findex.GetEnumerator(); this.iterator = new KWIterator(); long currentMaxId = maxId.id; KeyWord cache = null; this.iterator.moveNext = () => { if (maxId.id == -1) { return(false); } if (con != null) { if (con.I != maxId.id) { return(false); } } if (currentMaxId > (maxId.id + 1) && currentMaxId != long.MaxValue) { currentMaxId = maxId.id; IEnumerable <KeyWord> tmp = search(box, kw, con, asWord, maxId); if (tmp is IIndex2KeyWordIterable) { index = ((IIndex2KeyWordIterable)tmp).GetIndex(); } } if (index.MoveNext()) { if (--maxId.maxTime < 0) { maxId.id = -1; return(false); } Object[] os = (Object[])index.Current; long osid = (long)os [1]; maxId.id = osid; currentMaxId = maxId.id; if (con != null) { if (con.I != maxId.id) { return(false); } } cache = typeof(T) == typeof(KeyWordE) ? (KeyWord) new KeyWordE() : new KeyWordN(); cache.KWord = os [0]; cache.I = (long)os [1]; cache.P = (int)os [2]; return(true); } maxId.id = -1; return(false); }; this.iterator.current = () => { return(cache); }; }
private static IEnumerable <KeyWord> search(IBox box, KeyWord kw, KeyWord con, bool asWord, MaxID maxId) { if (kw is KeyWordE) { asWord = true; return(new Index2KeyWordIterable <KeyWordE> ( box.Select <Object> ("from /E where K==? & I<=?", kw.KWord, maxId.id), box, kw, con, asWord, maxId)); } else { if (con is KeyWordE) { asWord = true; } if (con == null || asWord) { asWord = true; return(new Index2KeyWordIterable <KeyWordN> ( box.Select <Object> ("from /N where K==? & I<=?", kw.KWord, maxId.id), box, kw, con, asWord, maxId)); } else { Object[] os = (Object[])box ["/N", kw.KWord, con.ID, (con.Position + ((KeyWordN)con).size())] .Select <Object> (); if (os != null) { KeyWordN cache = new KeyWordN(); cache.KWord = os [0]; cache.I = (long)os [1]; cache.P = (int)os [2]; List <KeyWord> r = new List <KeyWord> (1); r.Add(cache); return(r); } else { return(emptySearch); } } } }
private IEnumerable <KeyWord> search(IBox box, KeyWord nw, IEnumerable <KeyWord> condition, bool isWord, MaxID maxId) { long r1_id = -1; foreach (KeyWord r1_con in condition) { if (isWord) { if (r1_id == r1_con.ID) { continue; } } r1_id = r1_con.ID; foreach (KeyWord k in search(box, nw, r1_con, isWord, maxId)) { k.previous = r1_con; yield return(k); } } }