Beispiel #1
0
            private List <string> GetRelationList(InvertFragment fragment, string a, string b, string c)
            {
                List <string> list = fragment.FindCommonDocumentByKeys(new string[] { a, b }, 10);

                if (list != null && list.Count > 0)
                {
                    return(list);
                }

                list = fragment.FindCommonDocumentByKeys(new string[] { b, c }, 10);
                if (list != null && list.Count > 0)
                {
                    return(list);
                }

                list = fragment.FindCommonDocumentByKeys(new string[] { c, a }, 10);
                if (list != null && list.Count > 0)
                {
                    return(list);
                }
                return(list);
            }
            private List<string> GetRelationList(InvertFragment fragment, string a, string b, string c)
            {
                List<string> list = fragment.FindCommonDocumentByKeys(new string[] { a, b }, 10);
                if (list != null && list.Count > 0)
                {
                    return list;
                }

                list = fragment.FindCommonDocumentByKeys(new string[] { b, c }, 10);
                if (list != null && list.Count > 0)
                {
                    return list;
                }

                list = fragment.FindCommonDocumentByKeys(new string[] { c, a }, 10);
                if (list != null && list.Count > 0)
                {
                    return list;
                }
                return list;
            }
Beispiel #3
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));
        }