使用PostGreSQL数据库进行text录入和text检索

使用PostGreSQL数据库进行text录入和text检索,第1张

概述中文分词 ChineseParse.cs using System;using System.Collections;using System.IO;using System.Text.RegularExpressions;namespace FullTextSearch.Common{ /// <summary> /// 中文分词器。 /// </summar 中文分词 ChineseParse.cs
@H_301_6@using System;@H_301_6@using System.Collections;@H_301_6@using System.IO;@H_301_6@using System.Text.RegularExpressions;namespace FullTextSearch.Common{    /// <summary>    /// 中文分词器。    /// </summary>    @H_301_6@public @H_301_6@class ChineseParse    {        @H_301_6@private @H_301_6@static @H_301_6@Readonly ChineseWordsHashCountSet _counttable;        @H_301_6@static ChineseParse()        {            _counttable = @H_301_6@new ChineseWordsHashCountSet();            InitFromfile("ChineseDictionary.txt");        }        /// <summary>        /// 从指定的文件中初始化中文词语字典和字符串次数字典。        /// </summary>        /// <param name="filename">文件名</param>        @H_301_6@private @H_301_6@static @H_301_6@voID InitFromfile(@H_301_6@string filename)        {            @H_301_6@string path = Path.Combine(Directory.GetCurrentDirectory(),@"..\..\Common\",filename);            @H_301_6@if (file.Exists(path))            {                @H_301_6@using (StreamReader sr = file.OpenText(path))                {                    @H_301_6@string s = "";                    @H_301_6@while ((s = sr.Readline()) != @H_301_6@null)                    {                        ChineseWordUnit _tempunit = InitUnit(s);                        _counttable.InsertWord(_tempunit.Word);                    }                }            }        }        /// <summary>        /// 将一个字符串解析为ChineseWordUnit。        /// </summary>        /// <param name="s">字符串</param>        /// <returns>解析得到的ChineseWordUnit</returns>        /// 4        /// 0        @H_301_6@private @H_301_6@static ChineseWordUnit InitUnit(@H_301_6@string s)        {            @H_301_6@var reg = @H_301_6@new Regex(@"\s+");            @H_301_6@string[] temp = reg.Split(s);            //if (temp.Length != 2)            //{            // throw new Exception("字符串解析错误:" + s);            //}            @H_301_6@if (temp.Length != 1)            {                @H_301_6@throw @H_301_6@new Exception("字符串解析错误:" + s);            }            @H_301_6@return @H_301_6@new ChineseWordUnit(temp[0],Int32.Parse("1"));        }        /// <summary>        /// 分析输入的字符串,将其切割成一个个的词语。        /// </summary>        /// <param name="s">待切割的字符串</param>        /// <returns>所切割得到的中文词语数组</returns>        @H_301_6@public @H_301_6@static @H_301_6@string[] ParseChinese(@H_301_6@string s)        {            @H_301_6@int _length = s.Length;            @H_301_6@string _temp = String.Empty;            @H_301_6@var _words = @H_301_6@new ArrayList();            @H_301_6@for (@H_301_6@int i = 0; i < s.Length;)            {                _temp = s.Substring(i,1);                @H_301_6@if (_counttable.GetCount(_temp) > 1)                {                    @H_301_6@int j = 2;                    @H_301_6@for (; i + j < s.Length + 1 && _counttable.GetCount(s.Substring(i,j)) > 0; j++)                    {                    }                    _temp = s.Substring(i,j - 1);                    i = i + j - 2;                }                i++;                _words.Add(_temp);            }            @H_301_6@var _tempStringArray = @H_301_6@new @H_301_6@string[_words.Count];            _words.copyTo(_tempStringArray);            @H_301_6@return _tempStringArray;        }    }}
ChineseWordsHashCountSet.cs
@H_301_6@using System.Collections;namespace FullTextSearch.Common{    /// <summary>    /// 记录字符串出现在中文字典所录中文词语的前端的次数的字典类。如字符串"中"出现在"中国"的前端,则在字典中记录一个次数。    /// </summary>    @H_301_6@public @H_301_6@class ChineseWordsHashCountSet    {        /// <summary>        /// 记录字符串在中文词语中出现次数的Hashtable。键为特定的字符串,值为该字符串在中文词语中出现的次数。        /// </summary>        @H_301_6@private @H_301_6@Readonly Hashtable _roottable;        /// <summary>        /// 类型初始化。        /// </summary>        @H_301_6@public ChineseWordsHashCountSet()        {            _roottable = @H_301_6@new Hashtable();        }        /// <summary>        /// 查询指定字符串出现在中文字典所录中文词语的前端的次数。        /// </summary>        /// <param name="s">指定字符串</param>        /// <returns>字符串出现在中文字典所录中文词语的前端的次数。若为-1,表示不出现。</returns>        @H_301_6@public @H_301_6@int GetCount(@H_301_6@string s)        {            @H_301_6@if (!_roottable.ContainsKey(s.Length))            {                @H_301_6@return -1;            }            @H_301_6@var _temptable = (Hashtable) _roottable[s.Length];            @H_301_6@if (!_temptable.ContainsKey(s))            {                @H_301_6@return -1;            }            @H_301_6@return (@H_301_6@int) _temptable[s];        }        /// <summary>        /// 向次数字典中插入一个词语。解析该词语,插入次数字典。        /// </summary>        /// <param name="s">所处理的字符串。</param>        @H_301_6@public @H_301_6@voID InsertWord(@H_301_6@string s)        {            @H_301_6@for (@H_301_6@int i = 0; i < s.Length; i++)            {                @H_301_6@string _s = s.Substring(0,i + 1);                InsertSubString(_s);            }        }        /// <summary>        /// 向次数字典中插入一个字符串的次数记录。        /// </summary>        /// <param name="s">所插入的字符串。</param>        @H_301_6@private @H_301_6@voID InsertSubString(@H_301_6@string s)        {            @H_301_6@if (!_roottable.ContainsKey(s.Length) && s.Length > 0)            {                @H_301_6@var _newHashtable = @H_301_6@new Hashtable();                _roottable.Add(s.Length,_newHashtable);            }            @H_301_6@var _temptable = (Hashtable) _roottable[s.Length];            @H_301_6@if (!_temptable.ContainsKey(s))            {                _temptable.Add(s,1);            }            @H_301_6@else            {                _temptable[s] = (@H_301_6@int) _temptable[s] + 1;            }        }    }}
ChineseWordUnit.cs
namespace FullTextSearch.Common{    @H_301_6@public @H_301_6@struct ChineseWordUnit    {        @H_301_6@private @H_301_6@Readonly @H_301_6@int _power;        @H_301_6@private @H_301_6@Readonly @H_301_6@string _word;        /// <summary>        /// 结构初始化。        /// </summary>        /// <param name="word">中文词语</param>        /// <param name="power">该词语的权重</param>        @H_301_6@public ChineseWordUnit(@H_301_6@string word,@H_301_6@int power)        {            _word = word;            _power = power;        }        /// <summary>        /// 中文词语单元所对应的中文词。        /// </summary>        @H_301_6@public @H_301_6@string Word        {            @H_301_6@get { @H_301_6@return _word; }        }        /// <summary>        /// 该中文词语的权重。        /// </summary>        @H_301_6@public @H_301_6@int Power        {            @H_301_6@get { @H_301_6@return _power; }        }    }}
ChineseDictionary.txt 主窗体界面 MainManager.cs
@H_301_6@using System;@H_301_6@using System.Collections.Generic;@H_301_6@using System.Data;@H_301_6@using System.Drawing;@H_301_6@using System.windows.Forms;@H_301_6@using FullTextSearch.Common;@H_301_6@using Npgsql;namespace FullTextSearch{    @H_301_6@public @H_301_6@partial @H_301_6@class MainManager : Form    {        @H_301_6@private @H_301_6@Readonly Postgresql pg = @H_301_6@new Postgresql();        @H_301_6@private @H_301_6@Readonly sqlquerys sqlquerys = @H_301_6@new sqlquerys();        @H_301_6@private @H_301_6@char analysisType;        @H_301_6@private @H_301_6@string createConnString = "";        @H_301_6@private DataSet dataSet = @H_301_6@new DataSet();        @H_301_6@private Datatable datatable = @H_301_6@new Datatable();        @H_301_6@private @H_301_6@char odabirAndOr;        @H_301_6@private @H_301_6@char vrstaPretrazivanja;        @H_301_6@public MainManager()        {            InitializeComponent();            rbtn_AND.Checked = @H_301_6@true;            rbtnNeizmjenjeni.Checked = @H_301_6@true;            odabirAndOr = '*';            radiobutton_Day.Checked = @H_301_6@true;            radiobutton_Day.Checked = @H_301_6@true;        }        @H_301_6@private @H_301_6@voID Form1_Load(@H_301_6@object sender,EventArgs e)        {            gb_unosPodataka.Enabled = @H_301_6@false;            groupBox_Search.Enabled = @H_301_6@false;            groupBox_Analysis.Enabled = @H_301_6@false;            button_disconnect.Enabled = @H_301_6@false;            button_Pretrazi.Backcolor = color.WhiteSmoke;            button_disconnect.Backcolor = color.WhiteSmoke;            button_unosTekstaUBazu.Backcolor = color.WhiteSmoke;            button1.Backcolor = color.WhiteSmoke;        }        @H_301_6@private @H_301_6@voID button_unosTekstaUBazu_Click(@H_301_6@object sender,EventArgs e)        {            @H_301_6@string searchTextBoxString = rTB_unosTextaUBazu.Text;            @H_301_6@if (searchTextBoxString != "")            {                pg.insertIntotable(searchTextBoxString,pg.conn);                MessageBox.Show(searchTextBoxString + " 添加到数据库!");                rTB_unosTextaUBazu.Clear();            }            @H_301_6@else            {                MessageBox.Show("不允许空数据!");            }        }        @H_301_6@private @H_301_6@voID button_Pretrazi_Click(@H_301_6@object sender,EventArgs e)        {            @H_301_6@string stringToSearch;            @H_301_6@string sql;            @H_301_6@string highlitedText;            @H_301_6@string rank;            @H_301_6@string check;            stringToSearch = txt_Search.Text.Trim();            @H_301_6@var List = @H_301_6@new List<@H_301_6@string>(ChineseParse.ParseChinese(stringToSearch));            ;            sql = sqlquerys.createsqlString(List,odabirAndOr,vrstaPretrazivanja);            richTextBox1.Text = sql;            check = sqlquerys.testIfEmpty(stringToSearch);            pg.insertIntoAnalysistable(stringToSearch,pg.conn);            pg.openConnection();            @H_301_6@var command = @H_301_6@new NpgsqlCommand(sql,pg.conn);            NpgsqlDataReader reader = command.ExecuteReader();            @H_301_6@int count = 0;            linkLabel_Rezultat.Text = " ";            @H_301_6@while (reader.Read())            {                highlitedText = reader[1].ToString();                rank = reader[3].ToString();                linkLabel_Rezultat.Text += highlitedText + "[" + rank + "]\n";                count++;            }            labelbrojac.Text = "找到的文件数量: " + count;            pg.closeConnection();        }        @H_301_6@private @H_301_6@voID rbtn_AND_CheckedChanged(@H_301_6@object sender,EventArgs e)        {            odabirAndOr = '*';        }        @H_301_6@private @H_301_6@voID rbtn_OR_CheckedChanged(@H_301_6@object sender,EventArgs e)        {            odabirAndOr = '+';        }        @H_301_6@private @H_301_6@voID rbtnNeizmjenjeni_CheckedChanged(@H_301_6@object sender,EventArgs e)        {            vrstaPretrazivanja = 'A';        }        @H_301_6@private @H_301_6@voID rbtn_Rijecnici_CheckedChanged(@H_301_6@object sender,EventArgs e)        {            vrstaPretrazivanja = 'B';        }        @H_301_6@private @H_301_6@voID rbtn_Fuzzy_CheckedChanged(@H_301_6@object sender,EventArgs e)        {            vrstaPretrazivanja = 'C';        }        @H_301_6@private @H_301_6@voID button_Connect_Click(@H_301_6@object sender,EventArgs e)        {            @H_301_6@if (connectMe())            {                gb_unosPodataka.Enabled = @H_301_6@true;                groupBox_Search.Enabled = @H_301_6@true;                groupBox_Analysis.Enabled = @H_301_6@true;                textBox_Database.Enabled = @H_301_6@false;                textBox_IP.Enabled = @H_301_6@false;                textBox_Port.Enabled = @H_301_6@false;                textBox_Password.Enabled = @H_301_6@false;                textBox_UserID.Enabled = @H_301_6@false;                button_Connect.Enabled = @H_301_6@false;                button_disconnect.Enabled = @H_301_6@true;                button_Pretrazi.Backcolor = color.SkyBlue;                button_disconnect.Backcolor = color.IndianRed;                button_unosTekstaUBazu.Backcolor = color.MediumSeaGreen;                button1.Backcolor = color.MediumSeaGreen;                button_Connect.Backcolor = color.WhiteSmoke;            }        }        @H_301_6@private @H_301_6@voID button_disconnect_Click(@H_301_6@object sender,EventArgs e)        {            gb_unosPodataka.Enabled = @H_301_6@false;            groupBox_Search.Enabled = @H_301_6@false;            groupBox_Analysis.Enabled = @H_301_6@false;            textBox_Database.Enabled = @H_301_6@true;            textBox_IP.Enabled = @H_301_6@true;            textBox_Port.Enabled = @H_301_6@true;            textBox_Password.Enabled = @H_301_6@true;            textBox_UserID.Enabled = @H_301_6@true;            button_Connect.Enabled = @H_301_6@true;            button_disconnect.Enabled = @H_301_6@false;            button_Pretrazi.Backcolor = color.WhiteSmoke;            button_disconnect.Backcolor = color.WhiteSmoke;            button_unosTekstaUBazu.Backcolor = color.WhiteSmoke;            button1.Backcolor = color.WhiteSmoke;            button_Connect.Backcolor = color.MediumSeaGreen;            txt_Search.Text = "";            linkLabel_Rezultat.Text = "";            richTextBox1.Text = "";            labelbrojac.Text = "";        }        @H_301_6@private @H_301_6@bool connectMe()        {            createConnString += "Server=" + textBox_IP.Text + ";Port=" + textBox_Port.Text + ";User ID=" +                                textBox_UserID.Text + ";Password=" + textBox_Password.Text + ";Database=" +                                textBox_Database.Text + ";";            sqlquerys.setTheKey(createConnString);            pg.setConnectionString();            pg.setConnection();            @H_301_6@if (pg.openConnection())            {                MessageBox.Show("您已成功连接!");                pg.closeConnection();                @H_301_6@return @H_301_6@true;            }            @H_301_6@return @H_301_6@false;        }        @H_301_6@private @H_301_6@voID button1_Click(@H_301_6@object sender,EventArgs e)        {            @H_301_6@string selectedTimestamp;            selectedTimestamp = dateTimePicker_From.Value.ToString("dd-MM-yyyy hh:mm:ss") + " " +                                dateTimePicker_To.Value.ToString("dd-MM-yyyy hh:mm:ss");            @H_301_6@var analize = @H_301_6@new Analysis(selectedTimestamp,analysisType);            analize.Show();        }        @H_301_6@private @H_301_6@voID radiobutton_Day_CheckedChanged(@H_301_6@object sender,EventArgs e)        {            analysisType = 'D';        }        @H_301_6@private @H_301_6@voID radiobutton_Hour_CheckedChanged(@H_301_6@object sender,EventArgs e)        {            analysisType = 'H';        }    }}
sqlquerys.cs代码:
@H_301_6@using System.Collections.Generic;namespace FullTextSearch{    @H_301_6@internal @H_301_6@class sqlquerys    {        @H_301_6@private @H_301_6@static @H_301_6@string giveMeTheKey;        @H_301_6@private @H_301_6@static @H_301_6@int tempInt = 1;        //设置连接字符串        @H_301_6@public @H_301_6@voID setTheKey(@H_301_6@string connString)        {            giveMeTheKey = connString;            giveMeTheKey += "";        }        //将连接字符串存储在静态变量中        @H_301_6@public @H_301_6@string getTheKey()        {            giveMeTheKey += "";            @H_301_6@return giveMeTheKey;        }        @H_301_6@public @H_301_6@voID setCounter()        {            tempInt = 1;        }        //根据AND和OR的选择分析字符串进行搜索        @H_301_6@public @H_301_6@string createFunctionString(List<@H_301_6@string> searchList,@H_301_6@char selector)        {            @H_301_6@string TempString = "";            @H_301_6@string[] TempFIEld = @H_301_6@null;            @H_301_6@int i = 0;            @H_301_6@int j = 0;            @H_301_6@foreach (@H_301_6@string searchStringInList @H_301_6@in searchList)            {                @H_301_6@if (j != 0)                {                    @H_301_6@if (selector == '+')                        TempString = TempString + " | ";                    @H_301_6@else @H_301_6@if (selector == '*')                        TempString = TempString + " & ";                }                j = 1;                TempFIEld = splitListForinput(searchStringInList);                TempString = TempString + "(";                @H_301_6@foreach (@H_301_6@string justTempString @H_301_6@in TempFIEld)                {                    @H_301_6@if (i != 0)                    {                        TempString = TempString + " & ";                    }                    TempString = TempString + justTempString;                    i = 1;                }                TempString = TempString + ")";                i = 0;            }            @H_301_6@return TempString;        }        //帮助方法        @H_301_6@public List<@H_301_6@string> splitinputFIEld(@H_301_6@string[] inputFIEld)        {            @H_301_6@var unfinishedList = @H_301_6@new List<@H_301_6@string>();            @H_301_6@foreach (@H_301_6@string splitString @H_301_6@in inputFIEld)            {                unfinishedList.Add(splitString);            }            @H_301_6@return unfinishedList;        }        //帮助方法        @H_301_6@public @H_301_6@string[] splitListForinput(@H_301_6@string inputString)        {            @H_301_6@string[] parsedList = @H_301_6@null;            parsedList = inputString.Split(' ');            @H_301_6@return parsedList;        }        //在Postgresql中创建ts功能的功能,用于字典搜索        @H_301_6@public @H_301_6@string createTsFunction(@H_301_6@string tsstring)        {            @H_301_6@string tsheadline = "";            @H_301_6@string tsRank = "";            @H_301_6@string tsFunction = "";            tsheadline = ",\n ts_headline(\"content\",to_tsquery('" + tsstring + "')),\"content\"";            tsRank = ",\n ts_rank(to_tsvector(\"content\"),to_tsquery('" + tsstring + "')) rank";            tsFunction = tsheadline + tsRank;            @H_301_6@return tsFunction;        }        //创建SQL查询依赖于选择哪种类型的搜索,也取决于AND或OR选择器        @H_301_6@public @H_301_6@string createsqlString(List<@H_301_6@string> searchList,@H_301_6@char selector,@H_301_6@char vrstaPretrazivanja)        {            @H_301_6@string selectString = "";            @H_301_6@string myTempString = "";            @H_301_6@string TempString = "";            @H_301_6@int i = 0;            TempString = createFunctionString(searchList,selector);            TempString = createTsFunction(TempString);            selectString = "SELECT \"ID\"" + TempString + "\nFROM \"texttable\" \nWHERE ";            @H_301_6@if (vrstaPretrazivanja == 'A')            {                @H_301_6@foreach (@H_301_6@string myString @H_301_6@in searchList)                {                    @H_301_6@if (i == 0)                    {                        myTempString = myTempString + "\"content\" liKE '%" + myString + "%' ";                        i++;                    }                    @H_301_6@else                    {                        @H_301_6@if (selector == '*')                            myTempString = myTempString + "\nAND \"content\" liKE '%" + myString + "%' ";                        @H_301_6@else @H_301_6@if (selector == '+')                            myTempString = myTempString + "\nor \"content\" liKE '%" + myString + "%' ";                    }                }            }            @H_301_6@else @H_301_6@if (vrstaPretrazivanja == 'B')            {                @H_301_6@foreach (@H_301_6@string myString @H_301_6@in searchList)                {                    @H_301_6@string temporalString = "";                    @H_301_6@string[] testingString = myString.Split(' ');                    @H_301_6@for (@H_301_6@int k = 0; k < testingString.Length; k++)                    {                        @H_301_6@if (k != testingString.Length - 1)                        {                            temporalString += testingString[k] + " & ";                        }                        @H_301_6@else                        {                            temporalString += testingString[k];                        }                    }                    @H_301_6@if (i == 0)                    {                        myTempString = myTempString + "to_tsvector(\"content\") @@ to_tsquery('english','" +                                       temporalString + "')";                        i++;                    }                    @H_301_6@else                    {                        @H_301_6@if (selector == '*')                            myTempString = myTempString + "\nAND to_tsvector(\"content\") @@ to_tsquery('english','" +                                           temporalString + "')";                        @H_301_6@else @H_301_6@if (selector == '+')                            myTempString = myTempString + "\nor to_tsvector(\"content\") @@ to_tsquery('english','" +                                           temporalString + "')";                    }                }            }            @H_301_6@if (vrstaPretrazivanja == 'C')            {                @H_301_6@foreach (@H_301_6@string myString @H_301_6@in searchList)                {                    @H_301_6@if (i == 0)                    {                        myTempString = myTempString + "\"content\" % '" + myString + "' ";                        i++;                    }                    @H_301_6@else                    {                        @H_301_6@if (selector == '*')                            myTempString = myTempString + "\nAND \"content\" % '" + myString + "' ";                        @H_301_6@else @H_301_6@if (selector == '+')                            myTempString = myTempString + "\nor \"content\" % '" + myString + "' ";                    }                }            }            selectString = selectString + myTempString + "\norDER BY rank DESC";            @H_301_6@return selectString;        }        @H_301_6@public @H_301_6@string testIfEmpty(@H_301_6@string searchedText)        {            @H_301_6@string checkingIfEmpty = "SELECT * FROM \"analysistable\" WHERE \"searchedtext\" =' " + searchedText + "'";            @H_301_6@return checkingIfEmpty;        }        @H_301_6@public @H_301_6@string queryForAnalysis(@H_301_6@char analysisChoice)        {            @H_301_6@string myTestsql = "";            @H_301_6@if (analysisChoice == 'H')            {                //这个查询是这样写的只是为了测试的目的,它需要改变                myTestsql = "SELECT * FROM crosstab('SELECT CAST((\"searchedtext\") AS text) searchedText,"                            +                            " CAST(EXTRACT(HOUR FROM \"timeOfSearch\") AS int) AS sat,CAST(COUNT(*) AS int) AS broj FROM \"analysistable\" GROUP BY \"searchedText\",sat"                            +                            " ORDER BY \"searchedtext\",sat','SELECT rbrSata FROM sat ORDER BY rbrSata') AS pivottable (\"searchedText\" TEXT,t0_1 INT,t1_2 INT"                            +                            ",t2_3 INT,t3_4 INT,t4_5 INT,t5_6 INT,t6_7 INT,t7_8 INT,t8_9 INT,t9_10 INT,t10_11 INT,t11_12 INT,t12_13 INT"                            +                            ",t13_14 INT,t14_15 INT,t15_16 INT,t16_17 INT,t17_18 INT,t18_19 INT,t19_20 INT,t20_21 INT,t21_22 INT,t22_23 INT,t23_00 INT) ORDER BY \"searchedText\"";                @H_301_6@return myTestsql;            }            @H_301_6@if (analysisChoice == 'D')            {                //这个查询是这样写的只是为了测试的目的,它需要改变                myTestsql += "SELECT *FROM crosstab ('SELECT CAST((\"searchedtext\") AS text) AS searchedText,CAST(EXTRACT(DAY FROM \"dateOfSearch\") AS int) AS dan"                             + ","                             +                             "dan ORDER BY \"searchedtext\",dan','SELECT rbrDana FROM dan ORDER BY rbrDana') AS pivottable(\"searchedtext\" TEXT";                @H_301_6@return myTestsql;            }            @H_301_6@return myTestsql;        }        //此方法用于解析日期        @H_301_6@public @H_301_6@int[] parseForDates(@H_301_6@string date)        {            @H_301_6@string[] temp;            @H_301_6@var tempInt = @H_301_6@new @H_301_6@int[3];            temp = date.Split('-');            @H_301_6@for (@H_301_6@int i = 0; i < 3; i++)            {                tempInt[i] = @H_301_6@int.Parse(temp[i]);            }            @H_301_6@return tempInt;        }        //此代码用于创建分析,它执行一些日期/时间 *** 作,以便能够为选定的日期/时间创建分析。        @H_301_6@public @H_301_6@string createsqlForDayAnalysis(@H_301_6@string dateFrom,@H_301_6@string dateto)        {            @H_301_6@string insertIntoTemptable = "";            @H_301_6@string dateTimeForAnalysis = "";            @H_301_6@int[] tempFrom = parseForDates(dateFrom);            @H_301_6@int[] tempTo = parseForDates(dateto);            //月份变更算法            @H_301_6@while (tempFrom[0] != tempTo[0] || tempFrom[1] != tempTo[1])            {                @H_301_6@if (tempFrom[1] == tempTo[1])                {                    @H_301_6@if (tempFrom[0] != tempTo[0])                    {                        @H_301_6@for (@H_301_6@int i = tempInt + 1; tempFrom[0] + 2 < tempTo[0] + 2; i++)                        {                            insertIntoTemptable += "INSERT INTO \"dan\" VALUES (" + i + ");";                            dateTimeForAnalysis += ",dd" + tempFrom[0] + tempFrom[1] + tempFrom[2] + " INT";                            tempInt = i;                            tempFrom[0]++;                        }                    }                }                @H_301_6@if (tempFrom[1] != tempTo[1])                {                    @H_301_6@if (tempFrom[1]%2 == 0 || tempFrom[1] == 7 || tempFrom[1] == 1)                    {                        @H_301_6@for (@H_301_6@int i = tempInt; tempFrom[0] < 31 && tempFrom[1] != tempTo[1]; i++)                        {                            insertIntoTemptable += "INSERT INTO \"dan\" VALUES (" + i + ");";                            dateTimeForAnalysis += ",dd" + tempFrom[0] + tempFrom[1] + tempFrom[2] + " INT";                            tempInt = i;                            tempFrom[0]++;                            @H_301_6@if (tempFrom[0] == 31)                            {                                tempFrom[1]++;                                tempFrom[0] = 1;                            }                        }                    }                }            }            dateTimeForAnalysis += ") ORDER BY \"searchedtext\"";            @H_301_6@return dateTimeForAnalysis + "#" + insertIntoTemptable;        }    }}
Postgresql.cs代码:
@H_301_6@using System;@H_301_6@using System.windows.Forms;@H_301_6@using Npgsql;@H_301_6@using NpgsqlTypes;namespace FullTextSearch{    @H_301_6@public @H_301_6@class Postgresql    {        @H_301_6@private @H_301_6@static @H_301_6@int tempInt = 1;        @H_301_6@private @H_301_6@Readonly sqlquerys sql = @H_301_6@new sqlquerys();        @H_301_6@public NpgsqlConnection conn;        @H_301_6@public @H_301_6@string connectionstring;        @H_301_6@private @H_301_6@string newConnString;        @H_301_6@public Postgresql()        {            setConnectionString();            setConnection();        }        @H_301_6@public @H_301_6@voID setConnectionString()        {            newConnString = sql.getTheKey();            connectionstring = String.Format(newConnString);            setConnection();        }        @H_301_6@public @H_301_6@voID setConnection()        {            conn = @H_301_6@new NpgsqlConnection(connectionstring);        }        @H_301_6@public @H_301_6@bool openConnection()        {            @H_301_6@try            {                conn.open();                @H_301_6@return @H_301_6@true;            }            @H_301_6@catch            {                MessageBox.Show("Unable to connect! Check parameters!");                @H_301_6@return @H_301_6@false;            }        }        @H_301_6@public @H_301_6@voID closeConnection()        {            conn.Close();        }        @H_301_6@public @H_301_6@voID insertIntotable(@H_301_6@string textToInsert,NpgsqlConnection nsqlConn)        {            @H_301_6@string MysqLString = "INSERT INTO \"texttable\" (\"content\") VALUES (@Param1)";            @H_301_6@var myParameter = @H_301_6@new NpgsqlParameter("@Param1",NpgsqlDbType.Text);            myParameter.Value = textToInsert;            openConnection();            @H_301_6@var myCommand = @H_301_6@new NpgsqlCommand(MysqLString,nsqlConn);            myCommand.Parameters.Add(myParameter);            myCommand.ExecuteNonquery();            closeConnection();        }        @H_301_6@public @H_301_6@voID insertIntoAnalysistable(@H_301_6@string textToInsert,NpgsqlConnection nsqlConn)        {            @H_301_6@string dateTime = DateTime.Now.ToString();            @H_301_6@string[] temp;            temp = dateTime.Split(' ');            @H_301_6@string MysqLString =                "INSERT INTO \"analysistable\" (\"searchedtext\",\"dateofsearch\",\"timeofsearch\") VALUES ('" +                textToInsert + "','" + temp[0] + "'" + ",'" + temp[1] + "');";            openConnection();            @H_301_6@var myCommand = @H_301_6@new NpgsqlCommand(MysqLString,nsqlConn);            myCommand.ExecuteNonquery();            closeConnection();        }        @H_301_6@public @H_301_6@voID executequery(@H_301_6@string queryText,NpgsqlConnection nsqlConn)        {            openConnection();            @H_301_6@var myCommand = @H_301_6@new NpgsqlCommand(queryText,nsqlConn);            myCommand.ExecuteNonquery();            closeConnection();        }        @H_301_6@public @H_301_6@voID createTemptable(NpgsqlConnection nsqlConn,@H_301_6@char analysisType,@H_301_6@string dateFrom,@H_301_6@string dateto,@H_301_6@string splitMe)        {            @H_301_6@if (analysisType == 'H')            {                @H_301_6@string dropIfExists = "DROP table IF EXISTS \"sat\";";                @H_301_6@string createTemptable = "CREATE table IF NOT EXISTS \"sat\" (rbrSata INT);";                @H_301_6@string insertIntoTemptable = "";                @H_301_6@for (@H_301_6@int i = 0; i < 24; i++)                {                    insertIntoTemptable += "INSERT INTO \"sat\" VALUES (" + i + ");";                }                openConnection();                @H_301_6@var commandDrop = @H_301_6@new NpgsqlCommand(dropIfExists,nsqlConn);                commandDrop.ExecuteNonquery();                @H_301_6@var commandCreate = @H_301_6@new NpgsqlCommand(createTemptable,nsqlConn);                commandCreate.ExecuteNonquery();                @H_301_6@var commandInsert = @H_301_6@new NpgsqlCommand(insertIntoTemptable,nsqlConn);                commandInsert.ExecuteNonquery();                closeConnection();            }            @H_301_6@else @H_301_6@if (analysisType == 'D')            {                @H_301_6@string dropIfExists = "DROP table IF EXISTS \"dan\";";                @H_301_6@string createTemptable = "CREATE table IF NOT EXISTS \"dan\" (rbrDana INT);";                @H_301_6@string insertIntoTemptable = splitMe;                openConnection();                @H_301_6@var commandDrop = @H_301_6@new NpgsqlCommand(dropIfExists,nsqlConn);                commandInsert.ExecuteNonquery();                closeConnection();            }        }    }}
PostGresql sql脚本:
@H_301_6@CREATE @H_301_6@table @H_301_6@public.analysistable ( ID @H_301_6@integer @H_301_6@NOT @H_301_6@NulL @H_301_6@DEFAulT nextval('analysistable_ID_seq'::regclass),searchedtext text @H_301_6@ColLATE pg_catalog."default" @H_301_6@NOT @H_301_6@NulL,dateofsearch @H_301_6@date @H_301_6@NOT @H_301_6@NulL,timeofsearch @H_301_6@time without @H_301_6@time @H_301_6@zone @H_301_6@NOT @H_301_6@NulL,@H_301_6@CONSTRAINT analysistable_pkey @H_301_6@PRIMARY @H_301_6@KEY (ID) ) @H_301_6@WITH ( OIDS = @H_301_6@FALSE ) tableSPACE pg_default;@H_301_6@ALTER @H_301_6@table @H_301_6@public.analysistable OWNER @H_301_6@to king;
@H_301_6@CREATE @H_301_6@table @H_301_6@public.texttable ( ID @H_301_6@integer @H_301_6@NOT @H_301_6@NulL @H_301_6@DEFAulT nextval('texttable_ID_seq'::regclass),content text @H_301_6@ColLATE pg_catalog."default" @H_301_6@NOT @H_301_6@NulL,@H_301_6@CONSTRAINT texttable_pkey @H_301_6@PRIMARY @H_301_6@KEY (ID) ) @H_301_6@WITH ( OIDS = @H_301_6@FALSE ) tableSPACE pg_default;@H_301_6@ALTER @H_301_6@table @H_301_6@public.texttable OWNER @H_301_6@to king;
运行结果如图: 总结

以上是内存溢出为你收集整理的使用PostGreSQL数据库进行text录入和text检索全部内容,希望文章能够帮你解决使用PostGreSQL数据库进行text录入和text检索所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1173080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存