public void SplitEnter(SphinxMatch match, int i)
        {
            string s = Convert.ToString(match);

            //textBox1.Text = s;
            char r  = ':';
            char r1 = ' ';

            string[] f  = s.Split(r);
            string[] h  = f[1].Split(r1);
            int      id = Convert.ToInt32(h[1]);

            NamePeople(id);
            _ArrPeopleId[i] = id;
        }
예제 #2
0
        /// <summary>
        /// 执行查询
        /// </summary>
        /// <returns></returns>
        public IList<SphinxResult> RunQueries()
        {
            var reqsCount = this._reqs.Count();
            var reqsLength = this._reqs.Sum(r => r.Length);
            var req = new SphReq();
            req.Write(1);
            req.Write((short)SearchCommand.SEARCHD_COMMAND_SEARCH);
            req.Write((short)Command.VER_COMMAND_SEARCH);
            req.Write((int)(4 + reqsLength));
            req.Write(reqsCount);
            foreach (var r in this._reqs) req.Mosaic(r.CutOffHead());
            var conn = this.GetConnection();
            conn.Send(req.GetBuffer());

            var receive = new byte[1024 * 512];
            var receLen = conn.Receive(receive);
            conn.Dispose();

            var rep = new SphRep(receive, receLen);
            var len = this.CheckResponse(rep);
            var sphinxResultList = new List<SphinxResult>();
            for (int rc = 0; rc < reqsCount; rc++)
            {
                var sphinxResult = new SphinxResult()
                {
                    AttrName = new List<string>(),
                    AttrTypes = new List<int>(),
                    Fields = new List<string>(),
                    Matches = new List<SphinxMatch>(),
                    Words = new List<SphinxWordInfo>(),
                    Status = rep.ReadInt()
                };
                if (sphinxResult.Status != (int)SearchStatus.SEARCHD_OK)
                {
                    if (sphinxResult.Status == (int)SearchStatus.SEARCHD_WARNING)
                    {
                        sphinxResult.WarnStr = Encoding.UTF8.GetString(rep.Read(len - 4));
                    }
                    else
                    {
                        sphinxResult.ErrStr = Encoding.UTF8.GetString(rep.Read(len - 4));
                        return null;
                    }
                }
                var fieldsNum = rep.ReadInt();
                for (int i = 0; i < fieldsNum; i++) sphinxResult.Fields.Add(rep.ReadStringNode());
                var attrNum = rep.ReadInt();
                for (int i = 0; i < attrNum; i++)
                {
                    sphinxResult.AttrName.Add(rep.ReadStringNode());
                    sphinxResult.AttrTypes.Add(rep.ReadInt());
                }
                var matchNum = rep.ReadInt();
                var id64 = rep.ReadInt();
                long doc;
                for (int i = 0; i < matchNum; i++)
                {
                    doc = 0 == id64 ? rep.ReadInt() : rep.ReadLong();
                    var docInfo = new SphinxMatch()
                    {
                        DocID = doc,
                        Weight = rep.ReadInt(),
                        AttrValues = new List<object>()
                    };
                    foreach (var type in sphinxResult.AttrTypes)
                    {
                        switch ((AttributeType)System.Enum.Parse(typeof(AttributeType), type.ToString()))
                        {
                            case AttributeType.SPH_ATTR_BIGINT:
                                docInfo.AttrValues.Add(rep.ReadLong());
                                rep.Read(8);
                                break;

                            case AttributeType.SPH_ATTR_FLOAT:
                                docInfo.AttrValues.Add(rep.ReadSingle());
                                rep.Read(8);
                                break;

                            case AttributeType.SPH_ATTR_MULTI:
                                var itemsNum = rep.ReadLong();
                                var vars = new List<long>();
                                for (int j = 0; j < itemsNum; j++) vars.Add(rep.ReadLong());
                                docInfo.AttrValues.Add(vars);
                                break;

                            default:
                                rep.Read(8);
                                docInfo.AttrValues.Add(rep.ReadLong());
                                break;
                        }
                    }
                    sphinxResult.Matches.Add(docInfo);
                }
                sphinxResult.Total = rep.ReadInt();
                sphinxResult.TotalFound = rep.ReadInt();
                sphinxResult.Time = rep.ReadInt();
                var wordNum = rep.ReadInt();
                for (int i = 0; i < wordNum; i++) sphinxResult.Words.Add(new SphinxWordInfo()
                {
                    Word = rep.ReadStringNode(),
                    Docs = rep.ReadInt(),
                    Hits = rep.ReadInt()
                });
                sphinxResultList.Add(sphinxResult);
            }
            return sphinxResultList;
        }