Exemple #1
0
        public void Update(FormatObject formatObject)
        {
            if (LocalStore.Exists(_tableName))
            {
                var dt  = LocalStore.Read(_tableName);
                var row = dt.AsEnumerable().Single(x =>
                {
                    return((x.Field <string>("SourceName") == formatObject.SourceName));
                });

                UpdateRow(row, formatObject);

                LocalStore.Write(dt, true);
            }
            else
            {
                var dt = CreateDataTable();

                DataRow dr = dt.NewRow();
                UpdateRow(dr, formatObject);
                dt.Rows.Add(dr);

                LocalStore.Write(dt, false);
            }
        }
Exemple #2
0
        public FormatObject GetLast()
        {
            if (LocalStore.Exists(_tableName))
            {
                var row = LocalStore.Read(_tableName).AsEnumerable()
                          .SingleOrDefault(x =>
                {
                    return((x.Field <string>("SourceName") == Source.SourceName));
                });

                if (row != null)
                {
                    var date = row.Field <DateTime>("LocalDateTime");
                    return(new FormatObject(
                               row.Field <string>("SourceName"),
                               new DateTimeOffset(date, Source.TimeZoneInfo.GetUtcOffset(date)),
                               Source.TimeZoneInfo));
                }
                else
                {
                    return(default(FormatObject));
                }
            }
            else
            {
                return(default(FormatObject));
            }
        }
Exemple #3
0
        public FormatObject GetLast()
        {
            if (LocalStore.Exists(Source.SourceName))
            {
                var row = LocalStore.Read(Source.SourceName).AsEnumerable()
                          .SingleOrDefault(x =>
                {
                    return((x.Field <string>("SourceName") == Source.SourceName));
                });

                if (row != null)
                {
                    return(new FormatObject(
                               row.Field <string>("SourceName"),
                               row.Field <DateTime>("LocalDateTime")));
                }
                else
                {
                    return(default(FormatObject));
                }
            }
            else
            {
                return(default(FormatObject));
            }
        }
Exemple #4
0
        public byte[] ProcessQuery(byte[] bytes)
        {
            try
            {
                Packet packet = Serializer.DeserializeFromBytes <Packet>(bytes);
                string type   = System.Text.Encoding.UTF8.GetString(packet.Data);

                //如果是文本搜索
                if (type == "Text-Query")
                {
                    string currentTextQuery = GetGlobalCache <string>("Current-Text-Query");
                    if (!string.IsNullOrEmpty(currentTextQuery))
                    {
                        string query = GetGlobalCache <string>(currentTextQuery);
                        WriteToConsole("Get Text Query:" + query);
                        string[]      keywords = segment.Split(query);
                        List <string> docs     = TextFragment.FindCommonDocumentByKeys(keywords, 10);


                        string  content      = string.Empty;
                        string  bestQuestion = string.Empty;
                        decimal bestQuesVal  = 0;
                        foreach (var doc in docs)
                        {
                            Template.Question       question = DataStore.Read(int.Parse(doc));
                            Tuple <string, decimal> tuple    = question.GetBestQuestion(query);
                            if (tuple.Item2 > bestQuesVal)
                            {
                                bestQuesVal  = tuple.Item2;
                                bestQuestion = tuple.Item1;
                            }
                            content += question.ToString() + ";";
                        }

                        string inputResultKey = Dns.GetHostName() + "," + _searchPort + query;
                        WriteToConsole("Result write into cache key=" + inputResultKey + ", count=" + docs.Count);

                        foreach (var keyword in keywords)
                        {
                            if (keyword.Length > 0)
                            {
                                content = content.Replace(keyword, "<strong>" + keyword + "</strong>");
                            }
                        }

                        if (bestQuestion.Length > 0 && bestQuesVal > (Decimal)0.1)
                        {
                            content = bestQuestion + ";" + content;
                        }

                        SetGlobalCache(inputResultKey, content);
                    }
                }

                //如果是相关搜索
                else if (type == "Relative-Query")
                {
                    string result = string.Empty;
                    string currentRelativeQuery = GetGlobalCache <string>("Current-Relative-Query");
                    if (!string.IsNullOrEmpty(currentRelativeQuery))
                    {
                        string query = GetGlobalCache <string>(currentRelativeQuery);
                        WriteToConsole("Get Relative Query:" + query);
                        List <Tuple <string, double> > tuples = RelativeTable[query].GetAllKeyValue(20);
                        string inputResultKey = Dns.GetHostName() + "," + _searchPort + query;
                        if (tuples == null)
                        {
                            tuples = new List <Tuple <string, double> >();
                        }
                        foreach (var tuple in tuples)
                        {
                            result += tuple.Item1 + ":" + tuple.Item2 + ";";
                        }
                        SetGlobalCache(inputResultKey, result);
                    }
                }
            }
            catch (Exception exception)
            {
                Logger.Warn(exception);
            }
            return(Serializer.SerializeToBytes(true));
        }