0%

函数查询 让我们可以利用 numeric域的值 或者 与域相关的的某个特定的值的函数,来对文档进行评分。

怎样使用函数查询

这里主要有两种方法可以使用函数查询,这两种方法都是通过solr http 接口的。
  1. 内嵌在正常的solr查询表达式中。即,将函数查询写在 q这个参数中,这时候,我们使用_val_将函数与其他的查询加以区别。至于具体怎样使用,请读者留意下面的例子。

  2. 使用明确为函数查询的参数,比如说dismax中的bf(boost function)这个参数。 注意:bf这个参数是可以接受多个函数查询的,它们之间用空格隔开,它们还可以带上权重。所以,当我们使用bf这个参数的时候,我们必须保证单个函数中是没有空格出现的,不然程序有可能会以为是两个函数。

    例如:  q=dismax&bf="ord(popularity)^0.5 recip(rord(price),1,1000,1000)^0.3

函数的格式(Function Query Syntax)

目前,function query 并不支持 a+b 这样的形式,我们得把它写成一个方法形式,这就是 sum(a,b).

可以利用的函数 (available function)

constant

支持有小数点的常量

例如:1.5 ;

        SolrQuerySyntax:_val_:1.5

fieldvalue

这个函数将会返回numeric field的值,这个域必须是indexd的,非multiValued的。格式很简单,就是该域的名字。如果这个域中没有这样的值,那么将会返回0。

ord

       对于一个域,它所有的值都将会按照字典顺序排列,这个函数返回你要查询的那个特定的值在这个顺序中的排名。这个域,必须是非multiValued的,当没有值存在的时候,将返回0.

例如:某个特定的域只能去三个值,“apple”、“banana”、“pear”,那么ord(“apple”)=1,ord(“banana”)=2,ord(“pear”)=3.

 需要注意的是,ord()这个函数,依赖于值在索引中的位置,所以当有文档被删除、或者添加的时候,ord()的值就会发生变化。当你使用MultiSearcher的时候,这个值也就是不定的了。

rord

这个函数将会返回与ord相对应的倒排序的排名。

格式: rord(myIndexedField).

sum

这个函数的意思就显而易见啦,它就是表示“和”啦。

格式:sum(x,1)

         sum(x,y)

         sum(sqrt(x),log(y),z,0.5)

product

   product(x,y,...)将会返回多个函数的乘积。

格式:product(x,2)

         product(x,y)

div

  div(x,y)表示x除以y的值

格式:div(1,x)

         div(sum(x,100),max(y,1))

pow

pow表示幂值。pow(x,y) =x^y。

例如:pow(x,0.5) 表示开方

        pow(x,log(y))

abs

 abs(x)将返回表达式的绝对值

格式:abs(-5)

格式:abs(x)

log

 log(x)将会返回基数为10,x的对数

格式: log(x)

           log(sum(x,100))

sqrt

sqrt(x) 返回 一个数的平方根

格式:sqrt(2)

         sqrt(sum(x,100))

map

 如果 x>=min,且x<=max,那么map(x,min,max,target)=target.

 如果 x不在[min,max]这个区间内,那么map(x,min,max,target)=x.

格式:map(x,0,0,1)

scale

scale(x,minTarget,maxTarget) 这个函数将会把x的值限制在[minTarget,maxTarget]范围内。

query

query(subquery,default)将会返回给定subquery的分数,如果subquery与文档不匹配,那么将会返回默认值。任何的查询类型都是受支持的。

可以通过引用的方式,也可以直接指定查询串。

例子:**q=product(popularity, query({!dismax v='solr rocks'})** 将会返回popularity和通过dismax 查询得到的分数的乘积。

         **q=product(popularity, query($qq)&qq={!dismax}solr rocks** 跟上一个例子的效果是一样的。不过这里使用的是引用的方式

         **q=product(popularity, query($qq,0.1)&qq={!dismax}solr rocks** 在前一个例子的基础上又加了一个默认值。

linear

linear(x,m,c)表示 m*x+c ,其中m和c都是常量,x是一个变量也可以是一个函数。

例如: linear(x,2,4)=2*x+4.

recip

 recip(x,m,a,b)=a/(m*x+b)其中,m、a、b是常量,x是变量或者一个函数。

 当a=b,并且x>=0的时候,这个函数的最大值是1,值的大小随着x的增大而减小。

例如:recip(rord(creationDate),1,1000,1000)

max

 max(x,c)将会返回一个函数和一个常量之间的最大值。

例如:max(myfield,0)

源文地址:http://mxsfengg.iteye.com/blog/352191

并行计算部分

沿用微软的写法,System.Threading.Tasks.::.Parallel类,提供对并行循环和区域的支持。 我们会用到的方法有For,ForEach,Invoke。

一、简单使用

首先我们初始化一个List用于循环,这里我们循环10次。(后面的代码都会按这个标准进行循环)
Code

以前发布过HanLP的Lucene插件,后来很多人跟我说其实Solr更流行(反正我是觉得既然Solr是Lucene的子项目,那么稍微改改配置就能支持Solr),于是就抽空做了个Solr插件出来,开源在Github上,欢迎改进。

HanLP中文分词solr插件支持Solr5.x,兼容Lucene5.x。

快速上手

hanlp-portable.jarhanlp-solr-plugin.jar共两个jar放入${webapp}/WEB-INF/lib

修改solr core的配置文件${core}/conf/schema.xml

"text_cn" class="solr.TextField"> type="index" enableIndexMode="true" class="com.hankcs.lucene.HanLPAnalyzer"/> type="query" enableIndexMode="true" class="com.hankcs.lucene.HanLPAnalyzer"/>

效果一览

对于新手来说,上面的两步可能太简略了,不如看看下面的step by step

启动solr

首先在solr-5.2.1\bin目录下启动solr:

solr start -f

用浏览器打开http://localhost:8983/solr/#/,看到如下页面说明一切正常:

创建core

在solr-5.2.1\server\solr下新建一个目录,取个名字比如叫one,将 示例配置文件solr-5.2.1\server\solr\configsets\sample_techproducts_configs\conf 拷贝过来,对conf目录下的schema.xml做上述一步改动,意思是使用HanLP分词器来对text_cn域进行分词。接着修改 schema.xml中的默认域type,搜索

"text" type="text" indexed="true" stored="false" multiValued="true"/>

修改为

"text" type="text_cn" indexed="true" stored="false" multiValued="true"/>

意思是默认文本为text_cn类型。

完成了之后在solr的管理界面导入这个core one:

接着就能在下拉列表中看到这个core了:

上传测试文档

修改好了,就可以拿一些测试文档来试试效果了。hanlp-solr-plugin代码库中的src/test/resources下有个测试文档集合documents.csv,其内容如下:

id,title1,你好世界2,商品和服务3,和服的价格是每镑15便士4,服务大众5,hanlp工作正常

代表着id从1到5共五个文档,接下来复制solr-5.2.1\example\exampledocs下的上传工具post.jar到resources目录,利用如下命令行将数据导入:

java -Dc=one -Dtype=application/csv -jar post.jar *.csv

Windows用户的话直接双击该目录下的upload.cmd即可。

正常情况下输出如下结果:

SimplePostTool version 5.0.0Posting files to [base] url http://localhost:8983/solr/one/update using content-type application/csv...POSTing file documents.csv to [base]1 files indexed.COMMITting Solr index changes to http://localhost:8983/solr/one/update...Time spent: 0:00:00.059请按任意键继续. . .

同时刷新一下core one的Overview,的确看到了5篇文档:

搜索文档

是时候看看HanLP分词的效果了,点击左侧面板的Query,输入“和服”试试:

发现精确地查到了“和服的价格是每镑15便士”,而不是“商品和服务”这种错误文档:

这说明HanLP工作良好。

要知道,不少中文分词器眉毛胡子一把抓地命中“商品和服务”这种错误文档,降低了查准率,拉低了用户体验,跟原始的MySQL LIKE有何区别?

代码调用

在Query改写的时候,可以利用HanLPAnalyzer分词结果中的词性等属性,如

String text = "中华人民共和国很辽阔";for (int i = 0; i < text.length(); ++i){ System.out.print(text.charAt(i) + "" + i + " ");}System.out.println();Analyzer analyzer = new HanLPAnalyzer();TokenStream tokenStream = analyzer.tokenStream("field", text);tokenStream.reset();while (tokenStream.incrementToken()){ CharTermAttribute attribute = tokenStream.getAttribute(CharTermAttribute.class); // 偏移量 OffsetAttribute offsetAtt = tokenStream.getAttribute(OffsetAttribute.class); // 距离 PositionIncrementAttribute positionAttr = kenStream.getAttribute(PositionIncrementAttribute.class); // 词性 TypeAttribute typeAttr = tokenStream.getAttribute(TypeAttribute.class); System.out.printf("[%d:%d %d] %s/%s\n", offsetAtt.startOffset(), offsetAtt.endOffset(), positionAttr.getPositionIncrement(), attribute, typeAttr.type());}

在另一些场景,支持以自定义的分词器(比如开启了命名实体识别的分词器、繁体中文分词器、CRF分词器等)构造HanLPTokenizer,比如:

tokenizer = new HanLPTokenizer(HanLP.newSegment() .enableJapaneseNameRecognize(true) .enableIndexMode(true), null, false);tokenizer.setReader(new StringReader("林志玲亮相网友:确定不是波多野结衣?"));...

高级配置

HanLP分词器主要通过class path下的hanlp.properties进行配置,请阅读HanLP自然语言处理包文档以了解更多相关配置,如:

停用词

用户词典

词性标注

……

原文地址:http://www.hankcs.com/nlp/segment/full-text-retrieval-solr-integrated-hanlp-chinese-word-segmentation.html







js 实现 input file 文件上传 />




选择图片








.NET调用NPOI组件导入导出Excel**的操作类
**  此NPOI操作类的优点如下:
(1)支持web及winform从DataTable导出到Excel;

(2)生成速度很快;
(3)准确判断数据类型,不会出现身份证转数值等问题;
(4)如果单页条数大于65535时会新建工作表;

(5)列宽自适应;

NPOI操作类

![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)

public class NPOIHelper
{
///


/// DataTable导出到Excel文件
///

/// 源DataTable
/// 表头文本
/// 保存位置
public static void Export(DataTable dtSource, string strHeaderText, string strFileName)
{
using (MemoryStream ms = Export(dtSource, strHeaderText))
{
using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
{
byte[] data = ms.ToArray();
fs.Write(data,
0, data.Length);
fs.Flush();
}
}
}

        </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
        <span style="color: #808080;">///</span><span style="color: #008000;"> DataTable导出到Excel的MemoryStream
        </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="dtSource"></span><span style="color: #008000;">源DataTable</span><span style="color: #808080;"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="strHeaderText"></span><span style="color: #008000;">表头文本</span><span style="color: #808080;"></param></span>
        <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> MemoryStream Export(DataTable dtSource, <span style="color: #0000ff;">string</span><span style="color: #000000;"> strHeaderText)
        {
            HSSFWorkbook workbook </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> HSSFWorkbook();
            HSSFSheet sheet </span>=<span style="color: #000000;"> workbook.CreateSheet();

            </span><span style="color: #0000ff;">#region</span> 右击文件 属性信息<span style="color: #000000;">
            {
                DocumentSummaryInformation dsi </span>=<span style="color: #000000;"> PropertySetFactory.CreateDocumentSummaryInformation();
                dsi.Company </span>= <span style="color: #800000;">"</span><span style="color: #800000;">NPOI</span><span style="color: #800000;">"</span><span style="color: #000000;">;
                workbook.DocumentSummaryInformation </span>=<span style="color: #000000;"> dsi;

                SummaryInformation si </span>=<span style="color: #000000;"> PropertySetFactory.CreateSummaryInformation();
                si.Author </span>= <span style="color: #800000;">"</span><span style="color: #800000;">文件作者信息</span><span style="color: #800000;">"</span>; <span style="color: #008000;">//</span><span style="color: #008000;">填加xls文件作者信息</span>
                si.ApplicationName = <span style="color: #800000;">"</span><span style="color: #800000;">创建程序信息</span><span style="color: #800000;">"</span>; <span style="color: #008000;">//</span><span style="color: #008000;">填加xls文件创建程序信息</span>
                si.LastAuthor = <span style="color: #800000;">"</span><span style="color: #800000;">最后保存者信息</span><span style="color: #800000;">"</span>; <span style="color: #008000;">//</span><span style="color: #008000;">填加xls文件最后保存者信息</span>
                si.Comments = <span style="color: #800000;">"</span><span style="color: #800000;">作者信息</span><span style="color: #800000;">"</span>; <span style="color: #008000;">//</span><span style="color: #008000;">填加xls文件作者信息</span>
                si.Title = <span style="color: #800000;">"</span><span style="color: #800000;">标题信息</span><span style="color: #800000;">"</span>; <span style="color: #008000;">//</span><span style="color: #008000;">填加xls文件标题信息</span>
                si.Subject = <span style="color: #800000;">"</span><span style="color: #800000;">主题信息</span><span style="color: #800000;">"</span>;<span style="color: #008000;">//</span><span style="color: #008000;">填加文件主题信息</span>
                si.CreateDateTime =<span style="color: #000000;"> DateTime.Now;
                workbook.SummaryInformation </span>=<span style="color: #000000;"> si;
            }
            </span><span style="color: #0000ff;">#endregion</span><span style="color: #000000;">

            HSSFCellStyle dateStyle </span>=<span style="color: #000000;"> workbook.CreateCellStyle();
            HSSFDataFormat format </span>=<span style="color: #000000;"> workbook.CreateDataFormat();
            dateStyle.DataFormat </span>= format.GetFormat(<span style="color: #800000;">"</span><span style="color: #800000;">yyyy-mm-dd</span><span style="color: #800000;">"</span><span style="color: #000000;">);

            </span><span style="color: #008000;">//</span><span style="color: #008000;">取得列宽</span>
            <span style="color: #0000ff;">int</span>[] arrColWidth = <span style="color: #0000ff;">new</span> <span style="color: #0000ff;">int</span><span style="color: #000000;">[dtSource.Columns.Count];
            </span><span style="color: #0000ff;">foreach</span> (DataColumn item <span style="color: #0000ff;">in</span><span style="color: #000000;"> dtSource.Columns)
            {
                arrColWidth[item.Ordinal] </span>= Encoding.GetEncoding(<span style="color: #800080;">936</span><span style="color: #000000;">).GetBytes(item.ColumnName.ToString()).Length;
            }
            </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span>; i < dtSource.Rows.Count; i++<span style="color: #000000;">)
            {
                </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> j = <span style="color: #800080;">0</span>; j < dtSource.Columns.Count; j++<span style="color: #000000;">)
                {
                    </span><span style="color: #0000ff;">int</span> intTemp = Encoding.GetEncoding(<span style="color: #800080;">936</span><span style="color: #000000;">).GetBytes(dtSource.Rows[i][j].ToString()).Length;
                    </span><span style="color: #0000ff;">if</span> (intTemp ><span style="color: #000000;"> arrColWidth[j])
                    {
                        arrColWidth[j] </span>=<span style="color: #000000;"> intTemp;
                    }
                }
            }
            </span><span style="color: #0000ff;">int</span> rowIndex = <span style="color: #800080;">0</span><span style="color: #000000;">;
            </span><span style="color: #0000ff;">foreach</span> (DataRow row <span style="color: #0000ff;">in</span><span style="color: #000000;"> dtSource.Rows)
            {
                </span><span style="color: #0000ff;">#region</span> 新建表,填充表头,填充列头,样式
                <span style="color: #0000ff;">if</span> (rowIndex == <span style="color: #800080;">10000</span> || rowIndex == <span style="color: #800080;">0</span><span style="color: #000000;">)
                {
                    </span><span style="color: #0000ff;">if</span> (rowIndex != <span style="color: #800080;">0</span><span style="color: #000000;">)
                    {
                        </span><span style="color: #0000ff;">if</span> (strHeaderText.Length > <span style="color: #800080;">0</span><span style="color: #000000;">)
                            sheet </span>=<span style="color: #000000;"> workbook.CreateSheet(strHeaderText);
                        </span><span style="color: #0000ff;">else</span><span style="color: #000000;">
                            sheet </span>=<span style="color: #000000;"> workbook.CreateSheet();
                    }

                    </span><span style="color: #0000ff;">#region</span> 表头及样式<span style="color: #000000;">
                    {
                        </span><span style="color: #0000ff;">if</span> (strHeaderText.Length > <span style="color: #800080;">0</span><span style="color: #000000;">)
                        {
                            HSSFRow headerRow </span>= sheet.CreateRow(<span style="color: #800080;">0</span><span style="color: #000000;">);
                            headerRow.HeightInPoints </span>= <span style="color: #800080;">25</span><span style="color: #000000;">;
                            headerRow.CreateCell(</span><span style="color: #800080;">0</span><span style="color: #000000;">).SetCellValue(strHeaderText);

                            HSSFCellStyle headStyle </span>=<span style="color: #000000;"> workbook.CreateCellStyle();
                            headStyle.Alignment </span>=<span style="color: #000000;"> NPOI.HSSF.UserModel.HSSFCellStyle.ALIGN_CENTER;
                            HSSFFont font </span>=<span style="color: #000000;"> workbook.CreateFont();
                            font.FontHeightInPoints </span>= <span style="color: #800080;">20</span><span style="color: #000000;">;
                            font.Boldweight </span>= <span style="color: #800080;">700</span><span style="color: #000000;">;
                            headStyle.SetFont(font);
                            headerRow.GetCell(</span><span style="color: #800080;">0</span>).CellStyle =<span style="color: #000000;"> headStyle;
                            sheet.AddMergedRegion(</span><span style="color: #0000ff;">new</span> Region(<span style="color: #800080;">0</span>, <span style="color: #800080;">0</span>, <span style="color: #800080;">0</span>, dtSource.Columns.Count - <span style="color: #800080;">1</span><span style="color: #000000;">));
                        }
                        </span><span style="color: #008000;">//</span><span style="color: #008000;">headerRow.Dispose();</span>
<span style="color: #000000;">                    }
                    </span><span style="color: #0000ff;">#endregion</span>

                    <span style="color: #0000ff;">#region</span> 列头及样式<span style="color: #000000;">
                    {
                        HSSFRow headerRow </span>= sheet.CreateRow(<span style="color: #800080;">1</span><span style="color: #000000;">);
                        HSSFCellStyle headStyle </span>=<span style="color: #000000;"> workbook.CreateCellStyle();
                        headStyle.Alignment </span>=<span style="color: #000000;"> NPOI.HSSF.UserModel.HSSFCellStyle.ALIGN_CENTER;
                        HSSFFont font </span>=<span style="color: #000000;"> workbook.CreateFont();
                        font.FontHeightInPoints </span>= <span style="color: #800080;">10</span><span style="color: #000000;">;
                        font.Boldweight </span>= <span style="color: #800080;">700</span><span style="color: #000000;">;
                        headStyle.SetFont(font);
                        </span><span style="color: #0000ff;">foreach</span> (DataColumn column <span style="color: #0000ff;">in</span><span style="color: #000000;"> dtSource.Columns)
                        {
                            headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
                            headerRow.GetCell(column.Ordinal).CellStyle </span>=<span style="color: #000000;"> headStyle;

                            </span><span style="color: #008000;">//</span><span style="color: #008000;">设置列宽</span>
                            sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + <span style="color: #800080;">1</span>) * <span style="color: #800080;">256</span><span style="color: #000000;">);
                        }
                        </span><span style="color: #008000;">//</span><span style="color: #008000;"> headerRow.Dispose();</span>
<span style="color: #000000;">                    }
                    </span><span style="color: #0000ff;">#endregion</span><span style="color: #000000;">

                    rowIndex </span>= <span style="color: #800080;">2</span><span style="color: #000000;">;
                }
                </span><span style="color: #0000ff;">#endregion</span>

                <span style="color: #0000ff;">#region</span> 填充内容<span style="color: #000000;">
                HSSFRow dataRow </span>=<span style="color: #000000;"> sheet.CreateRow(rowIndex);
                </span><span style="color: #0000ff;">foreach</span> (DataColumn column <span style="color: #0000ff;">in</span><span style="color: #000000;"> dtSource.Columns)
                {
                    HSSFCell newCell </span>=<span style="color: #000000;"> dataRow.CreateCell(column.Ordinal);

                    </span><span style="color: #0000ff;">string</span> drValue =<span style="color: #000000;"> row[column].ToString();

                    </span><span style="color: #0000ff;">switch</span><span style="color: #000000;"> (column.DataType.ToString())
                    {
                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.String</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">字符串类型</span>
                            drValue = drValue.Replace(<span style="color: #800000;">"</span><span style="color: #800000;">&</span><span style="color: #800000;">"</span>, <span style="color: #800000;">"</span><span style="color: #800000;">&</span><span style="color: #800000;">"</span><span style="color: #000000;">);
                            drValue </span>= drValue.Replace(<span style="color: #800000;">"</span><span style="color: #800000;">></span><span style="color: #800000;">"</span>, <span style="color: #800000;">"</span><span style="color: #800000;">></span><span style="color: #800000;">"</span><span style="color: #000000;">);
                            drValue </span>= drValue.Replace(<span style="color: #800000;">"</span><span style="color: #800000;"><</span><span style="color: #800000;">"</span>, <span style="color: #800000;">"</span><span style="color: #800000;"><</span><span style="color: #800000;">"</span><span style="color: #000000;">);
                            newCell.SetCellValue(drValue);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.DateTime</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">日期类型</span>
<span style="color: #000000;">                            DateTime dateV;
                            DateTime.TryParse(drValue, </span><span style="color: #0000ff;">out</span><span style="color: #000000;"> dateV);
                            newCell.SetCellValue(dateV);

                            newCell.CellStyle </span>= dateStyle;<span style="color: #008000;">//</span><span style="color: #008000;">格式化显示</span>
                            <span style="color: #0000ff;">break</span><span style="color: #000000;">;
                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Boolean</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">布尔型</span>
                            <span style="color: #0000ff;">bool</span> boolV = <span style="color: #0000ff;">false</span><span style="color: #000000;">;
                            </span><span style="color: #0000ff;">bool</span>.TryParse(drValue, <span style="color: #0000ff;">out</span><span style="color: #000000;"> boolV);
                            newCell.SetCellValue(boolV);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Int16</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">整型</span>
                        <span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Int32</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">整型</span>
                        <span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Int64</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">整型</span>
                        <span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Int</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">整型</span>
                            <span style="color: #0000ff;">int</span> invV = <span style="color: #800080;">0</span><span style="color: #000000;">;
                            </span><span style="color: #0000ff;">int</span>.TryParse(drValue, <span style="color: #0000ff;">out</span><span style="color: #000000;"> invV);
                            newCell.SetCellValue(invV);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;

                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Byte</span><span style="color: #800000;">"</span><span style="color: #000000;">:
                            </span><span style="color: #0000ff;">int</span> intV = <span style="color: #800080;">0</span><span style="color: #000000;">;
                            </span><span style="color: #0000ff;">int</span>.TryParse(drValue, <span style="color: #0000ff;">out</span><span style="color: #000000;"> intV);
                            newCell.SetCellValue(intV);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Decimal</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">浮点型                           </span>
                        <span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Double</span><span style="color: #800000;">"</span><span style="color: #000000;">:
                            </span><span style="color: #0000ff;">double</span> doubV = <span style="color: #800080;">0</span><span style="color: #000000;">;
                            </span><span style="color: #0000ff;">double</span>.TryParse(drValue, <span style="color: #0000ff;">out</span><span style="color: #000000;"> doubV);
                            newCell.SetCellValue(doubV);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.DBNull</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">空值处理</span>
                            newCell.SetCellValue(<span style="color: #800000;">""</span><span style="color: #000000;">);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                        </span><span style="color: #0000ff;">default</span><span style="color: #000000;">:
                            newCell.SetCellValue(</span><span style="color: #800000;">""</span><span style="color: #000000;">);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                    }

                }
                </span><span style="color: #0000ff;">#endregion</span><span style="color: #000000;">

                rowIndex</span>++<span style="color: #000000;">;
            }
            </span><span style="color: #0000ff;">using</span> (MemoryStream ms = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MemoryStream())
            {
                workbook.Write(ms);
                ms.Flush();
                ms.Position </span>= <span style="color: #800080;">0</span><span style="color: #000000;">;

                </span><span style="color: #008000;">//</span><span style="color: #008000;">sheet.Dispose();
                </span><span style="color: #008000;">//</span><span style="color: #008000;">workbook.Dispose();</span><span style="color: #008000;">//</span><span style="color: #008000;">一般只用写这一个就OK了,他会遍历并释放所有资源,但当前版本有问题所以只释放sheet</span>
                <span style="color: #0000ff;">return</span><span style="color: #000000;"> ms;
            }
        }

        </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
        <span style="color: #808080;">///</span><span style="color: #008000;"> 用于Web导出
        </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="dtSource"></span><span style="color: #008000;">源DataTable</span><span style="color: #808080;"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="strHeaderText"></span><span style="color: #008000;">表头文本</span><span style="color: #808080;"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="strFileName"></span><span style="color: #008000;">文件名</span><span style="color: #808080;"></param></span>
        <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> ExportByWeb(DataTable dtSource, <span style="color: #0000ff;">string</span> strHeaderText, <span style="color: #0000ff;">string</span><span style="color: #000000;"> strFileName)
        {
            HttpContext curContext </span>=<span style="color: #000000;"> HttpContext.Current;

            </span><span style="color: #008000;">//</span><span style="color: #008000;"> 设置编码和附件格式</span>
            curContext.Response.ContentType = <span style="color: #800000;">"</span><span style="color: #800000;">application/vnd.ms-excel</span><span style="color: #800000;">"</span><span style="color: #000000;">;
            curContext.Response.ContentEncoding </span>=<span style="color: #000000;"> Encoding.UTF8;
            curContext.Response.Charset </span>= <span style="color: #800000;">""</span><span style="color: #000000;">;
            curContext.Response.AppendHeader(</span><span style="color: #800000;">"</span><span style="color: #800000;">Content-Disposition</span><span style="color: #800000;">"</span><span style="color: #000000;">,
                </span><span style="color: #800000;">"</span><span style="color: #800000;">attachment;filename=</span><span style="color: #800000;">"</span> +<span style="color: #000000;"> HttpUtility.UrlEncode(strFileName, Encoding.UTF8));

            curContext.Response.BinaryWrite(Export(dtSource, strHeaderText).GetBuffer());
            curContext.Response.End();
        }

        </span><span style="color: #008000;">//</span><span style="color: #008000;">public static DataTable Import(string strFileName, int sheetindex)
        </span><span style="color: #008000;">//</span><span style="color: #008000;">{
        </span><span style="color: #008000;">//</span><span style="color: #008000;">    return Import(strFileName, sheetindex);
        </span><span style="color: #008000;">//</span><span style="color: #008000;">}</span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span><span style="color: #008000;">读取excel
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> 默认第一行为标头
        </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="strFileName"></span><span style="color: #008000;">excel文档路径</span><span style="color: #808080;"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
        <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> DataTable Import(<span style="color: #0000ff;">string</span> strFileName, <span style="color: #0000ff;">int</span> sheetindex, <span style="color: #0000ff;">int</span> recordcount, <span style="color: #0000ff;">int</span><span style="color: #000000;"> topcount)
        {
            DataTable dt </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> DataTable();

            HSSFWorkbook hssfworkbook;
            </span><span style="color: #0000ff;">using</span> (FileStream file = <span style="color: #0000ff;">new</span><span style="color: #000000;"> FileStream(strFileName, FileMode.Open, FileAccess.Read))
            {
                hssfworkbook </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> HSSFWorkbook(file);
            }

            HSSFSheet sheet </span>=<span style="color: #000000;"> hssfworkbook.GetSheetAt(sheetindex);
            System.Collections.IEnumerator rows </span>=<span style="color: #000000;"> sheet.GetRowEnumerator();
            </span><span style="color: #0000ff;">if</span> (topcount == <span style="color: #800080;">0</span><span style="color: #000000;">)
                topcount </span>= <span style="color: #800080;">1</span><span style="color: #000000;">;
            HSSFRow headerRow </span>= sheet.GetRow(<span style="color: #800080;">0</span> + topcount - <span style="color: #800080;">1</span><span style="color: #000000;">);
            </span><span style="color: #0000ff;">int</span> cellCount =<span style="color: #000000;"> headerRow.LastCellNum;

            </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> j = <span style="color: #800080;">0</span>; j < cellCount; j++<span style="color: #000000;">)
            {
                HSSFCell cell </span>=<span style="color: #000000;"> headerRow.GetCell(j);
                </span><span style="color: #0000ff;">if</span> (cell == <span style="color: #0000ff;">null</span><span style="color: #000000;">)
                    </span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;
                dt.Columns.Add(cell.ToString());
            }

            </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = (sheet.FirstRowNum + topcount); i <= sheet.LastRowNum; i++<span style="color: #000000;">)
            {
                </span><span style="color: #0000ff;">if</span> (recordcount > <span style="color: #800080;">0</span><span style="color: #000000;">)
                {
                    </span><span style="color: #0000ff;">if</span> (i > (recordcount + <span style="color: #800080;">2</span><span style="color: #000000;">))
                        </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                }
                HSSFRow row </span>=<span style="color: #000000;"> sheet.GetRow(i);
                DataRow dataRow </span>=<span style="color: #000000;"> dt.NewRow();

                </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> j = row.FirstCellNum; j < cellCount; j++<span style="color: #000000;">)
                {
                    </span><span style="color: #0000ff;">if</span> (row.GetCell(j) != <span style="color: #0000ff;">null</span><span style="color: #000000;">)
                    {
                        </span><span style="color: #0000ff;">if</span>(dt.Columns.Count><span style="color: #000000;">j)
                           dataRow[j] </span>=<span style="color: #000000;"> row.GetCell(j).ToString();
                    }
                }

                dt.Rows.Add(dataRow);
            }
            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> dt;
        }

        </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
        <span style="color: #808080;">///</span><span style="color: #008000;"> 获取Sheet列信息
        </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="strFileName"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="sheetindex"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="topcount"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
        <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> System.Collections.Generic.List<<span style="color: #0000ff;">string</span>> GetSheetColumns(<span style="color: #0000ff;">string</span> strFileName, <span style="color: #0000ff;">int</span> sheetindex, <span style="color: #0000ff;">int</span><span style="color: #000000;"> topcount)
        {

            HSSFWorkbook hssfworkbook;
            </span><span style="color: #0000ff;">using</span> (FileStream file = <span style="color: #0000ff;">new</span><span style="color: #000000;"> FileStream(strFileName, FileMode.Open, FileAccess.Read))
            {
                hssfworkbook </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> HSSFWorkbook(file);
            }

            HSSFSheet sheet </span>=<span style="color: #000000;"> hssfworkbook.GetSheetAt(sheetindex);
            System.Collections.IEnumerator rows </span>=<span style="color: #000000;"> sheet.GetRowEnumerator();
            </span><span style="color: #0000ff;">if</span> (topcount < <span style="color: #800080;">1</span><span style="color: #000000;">)
                topcount </span>= <span style="color: #800080;">1</span><span style="color: #000000;">;
            HSSFRow headerRow </span>= sheet.GetRow(<span style="color: #800080;">0</span> + topcount - <span style="color: #800080;">1</span><span style="color: #000000;">);
            </span><span style="color: #0000ff;">int</span> cellCount =<span style="color: #000000;"> headerRow.LastCellNum;
            System.Collections.Generic.List</span><<span style="color: #0000ff;">string</span>> list = <span style="color: #0000ff;">new</span> System.Collections.Generic.List<<span style="color: #0000ff;">string</span>><span style="color: #000000;">();
            </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> j = <span style="color: #800080;">0</span>; j < cellCount; j++<span style="color: #000000;">)
            {
                HSSFCell cell </span>=<span style="color: #000000;"> headerRow.GetCell(j);
                </span><span style="color: #0000ff;">if</span> (cell == <span style="color: #0000ff;">null</span><span style="color: #000000;">)
                    </span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;
                </span><span style="color: #0000ff;">if</span> (cell.ToString().Trim().Length > <span style="color: #800080;">0</span><span style="color: #000000;">)
                {
                    list.Add(cell.ToString());
                }
            }
            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> list;
        }

        </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
        <span style="color: #808080;">///</span> 
        <span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="strFileName"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
        <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> System.Collections.Generic.Dictionary<<span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">string</span>> GetSheetList(<span style="color: #0000ff;">string</span><span style="color: #000000;"> strFileName)
        {
            HSSFWorkbook hssfworkbook;
            </span><span style="color: #0000ff;">using</span> (FileStream file = <span style="color: #0000ff;">new</span><span style="color: #000000;"> FileStream(strFileName, FileMode.Open, FileAccess.Read))
            {
                hssfworkbook </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> HSSFWorkbook(file);
            }

            System.Collections.Generic.Dictionary</span><<span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">string</span>> lists = <span style="color: #0000ff;">new</span> System.Collections.Generic.Dictionary<<span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">string</span>><span style="color: #000000;">();

            </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span>; i < hssfworkbook.NumberOfSheets; i++<span style="color: #000000;">)
            {
                lists.Add(i, hssfworkbook.GetSheetName(i));
            }
            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> lists;
        }
    }</span>

java 实体对象转Map公共类

package org.kxtkx.portal.utils;

</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.lang.reflect.Field;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.util.HashMap;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.util.Map;
</span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.kxtkx.portal.user.Admin;
</span><span style="color: #008000;">/**</span><span style="color: #008000;">
 * 
 * </span><span style="color: #808080;">@author</span><span style="color: #008000;"> <a href="mailto:wangc@kxtkx.com">王成</a> 
 * @created in 2011-6-24 - 下午02:58:50
 * 本类说明:对象转Map
 </span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> ObjAnalysis {

 </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> Map ConvertObjToMap(Object obj){
  Map</span><String,Object> reMap = <span style="color: #0000ff;">new</span> HashMap<String,Object><span style="color: #000000;">();
  </span><span style="color: #0000ff;">if</span> (obj == <span style="color: #0000ff;">null</span><span style="color: #000000;">) 
   </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">null</span><span style="color: #000000;">;
  Field[] fields </span>=<span style="color: #000000;"> obj.getClass().getDeclaredFields();
  </span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
   </span><span style="color: #0000ff;">for</span>(<span style="color: #0000ff;">int</span> i=0;i<fields.length;i++<span style="color: #000000;">){
    </span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {
     Field f </span>=<span style="color: #000000;"> obj.getClass().getDeclaredField(fields[i].getName());
     f.setAccessible(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);
           Object o </span>=<span style="color: #000000;"> f.get(obj);
           reMap.put(fields[i].getName(), o);
    } </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (NoSuchFieldException e) {
     </span><span style="color: #008000;">//</span><span style="color: #008000;"> TODO Auto-generated catch block</span>
<span style="color: #000000;">     e.printStackTrace();
    } </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (IllegalArgumentException e) {
     </span><span style="color: #008000;">//</span><span style="color: #008000;"> TODO Auto-generated catch block</span>
<span style="color: #000000;">     e.printStackTrace();
    } </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (IllegalAccessException e) {
     </span><span style="color: #008000;">//</span><span style="color: #008000;"> TODO Auto-generated catch block</span>
<span style="color: #000000;">     e.printStackTrace();
    }
   }
  } </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (SecurityException e) {
   </span><span style="color: #008000;">//</span><span style="color: #008000;"> TODO Auto-generated catch block</span>
<span style="color: #000000;">   e.printStackTrace();
  } 
  </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> reMap;
 }

 </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args) {
  Admin a </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> Admin();
  a.setCPassword(</span>"123456"<span style="color: #000000;">);
  a.setCUsername(</span>"王成"<span style="color: #000000;">);
  Map m </span>=<span style="color: #000000;"> ConvertObjToMap(a);
  System.out.println(m);
 }
}</span>

在C#中,我们可以使用sqlBulkCopy去批量插入数据,其他批量插入方法不在讨论。

1 ///


2 /// SqlBulkCopy批量插入数据
3 ///

4 /// 链接字符串
5 /// 表名
6 /// 数据源
7 /// 一次事务插入的行数
8 public static void SqlBulkCopyByDataTable(string connectionStr, string dataTableName, DataTable sourceDataTable, int batchSize = 100000)
9 {
10 using (SqlConnection connection=new SqlConnection(connectionStr))
11 {
12 using (SqlBulkCopy sqlBulkCopy=new SqlBulkCopy(connectionStr,SqlBulkCopyOptions.UseInternalTransaction))
13 {
14 try
15 {
16 sqlBulkCopy.DestinationTableName = dataTableName;
17 sqlBulkCopy.BatchSize = batchSize;
18 for (int i = 0; i < sourceDataTable.Columns.Count; i++)
19 {
20 sqlBulkCopy.ColumnMappings.Add(sourceDataTable.Columns[i].ColumnName,sourceDataTable.Columns[i].ColumnName);
21 }
22 sqlBulkCopy.WriteToServer(sourceDataTable);
23 }
24 catch (Exception ex)
25 {
26
27 throw ex;
28 }
29 }
30 }
31 }

通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码。

   首先,表结构如下.

  

   其次,在我当前D盘中有个文本文件名为2.txt的文件。

  

  在数据库中,可以这样通过一句代码插入。

<span style="color: #0000ff;">Bulk</span>  <span style="color: #0000ff;">insert</span><span style="color: #000000;">  T_Demo
    </span><span style="color: #0000ff;">From</span>  <span style="color: #ff0000;">'</span><span style="color: #ff0000;">D:\2.txt</span><span style="color: #ff0000;">'</span>
    <span style="color: #0000ff;">With</span><span style="color: #000000;">
    (  
        fieldterminator</span><span style="color: #808080;">=</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">,</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,
        rowterminator</span><span style="color: #808080;">=</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">\n</span><span style="color: #ff0000;">'</span><span style="color: #000000;">
    )    </span>

通过SQL自动添加流水号

项目中往往有一些单据流水号或者流程流水号是希望通过新增一条记录后自动产生一个编号的,比如新增一条流程就自动根据当前日期自动添加该流程的流程流水号,下面介绍两种不同类型流水号通过SQL自动产生的方法。  
流水号格式:  www.2cto.com    

     第一种(数值类型):日期+流水号,比如“201104190001”-->"201104190002";   

     第二种(文本类型):前缀+日期+流水号,比如“WT201104190001”-->"WT201104190002"。  

不论哪种情况,流水号的生成原则都是一样的,流水号的产生都需要根据当前日期产生,新增的一条记录的流水号为当前日期下所有记录中流水号最大那条加1得来。  

www.2cto.com
一、数据库中添加一个表:TestNo

列名       数据类型                   说明  

ID         uniqueidentifier          主键  

No         bigint                        流水号字段,不过是纯数字型的流水号,这个为本例子的第一种情况,流水号可以为纯数字  

DT         datetime                   新增一条记录的当前时间,相信每新增一条记录都会记录这次操作的当前时间的。  

CharNo   varchar(50)               流水号字段,不过是可以有字符的流水号,这个为本例子的第二种情况。  

二、SQL代码

–自动流水号为纯数字的情况,如 201104190005

declare
@x int,
@y char(8)
select @x= COUNT(no) from TestNo where CAST(DT as date)=CAST(GETDATE() as date)
if(@x=0)
begin
select @y=convert(char(8),getdate(),112)
insert TestNo(No,DT) values(
@y+’0001’
,GETDATE())
end
else
insert TestNo(No,DT) values(
(select MAX(No)+1 from TestNo where CAST(DT as date)=CAST(GETDATE() as date))
,GETDATE())
select * from TestNo


–自动流水号为字符的情况,如 WT201104190005

declare
@x1 int,
@y1 char(8)
select @x1= COUNT(CharNo) from TestNo where CAST(DT as date)=CAST(GETDATE() as date)
if(@x1=0)
begin
select @y1=convert(char(8),getdate(),112)
insert TestNo(CharNo,DT) values(
‘WT’+@y1+’0001’
,GETDATE())
end
else
begin
insert TestNo(CharNo,DT) values(
‘WT’+cast((select MAX(CAST( SUBSTRING(charno,3,12) as bigint))+1 from TestNo where CAST(DT as date)=CAST(GETDATE() as date))as varchar(50))
,GETDATE())
end
select * from TestNo