Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
        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;
                    }
                }
            });
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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;
                    }
                }
            });
        }
Esempio n. 8
0
        /// <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);
        }
Esempio n. 9
0
            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);
                };
            }
Esempio n. 10
0
 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);
             }
         }
     }
 }
Esempio n. 11
0
        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);
                }
            }
        }