《信息检索》大作业1、2:建立索引、检索、查询扩展、系统评估

源代码下载:https://github.com/houseyoung/IR-Homework1-2

作业一:索引的建立
1、切词及词频统计:利用已提供的海量智能分词软件(代码中使用的是庖丁解牛Paoding Analyzer)对文档进行切词处理,并进行词频统计,形成DocIndex文件,结构为:文档号、频率、词。
2、分配词权重:采用词频标准化tfi=tfi/Max(tf)tf*idf两种方式分配词的权重。由DocIndex文件生成DocIndex(tf)DocIndex(tf*idf)文件。注意阈值的确定,词的取舍。
3、形成倒置文档:将DocIndex(tf)DocIndex(tf*idf)文件转换为DocInvert(tf)DocInvert (tf*idf)文件。

作业二:检索及评估系统
1、Query处理(与文档处理采用相同方法:切词,选择关键词等)。
2、用VSM(向量空间模型)方法,计算一个查询与一个文档集合中各文档的相似度,并排序输出结果(对问题1020输出详细结果,其他问题只记录文档排序即可)
3、应用查询扩展方法对Query处理后,对同一问题再次进行检索,并排序输出结果(对问题1020输出详细结果,其他问题只记录文档排序即可)
4、应用MRR(Mean Reciprocal Rank)方法,计算系统的MRR值。

使用Nginx等反向代理时如何从Request中获取客户端真实IP地址

在Java Web项目中,若想获取客户端的IP地址,最简单的方式便是使用HttpServletRequest中的getRemoteAddr()方法。但若使用该方法进行获取,一旦项目经过了反向代理(如Nginx),则获取到的IP地址是反向代理服务器的IP地址,而非客户端的真实IP地址。

在使用Nginx做反向代理的情况下,若想获取到客户端的真实IP地址,首先要保证Nginx的配置文件中有proxy_set_header X-Real-IP $remote_addr; 这一句。然后使用HttpServletRequest中的getHeader("X-Real-IP")方法,获取HTTP请求头中"X-Real-IP"中的内容,该内容即为客户端的真实IP地址。

代码样例如下:

// 访问者的IP地址(若未经过反向代理,则该地址为真实的访问者IP地址,否则为反向代理服务器的IP地址)
String customerIp = httpServletRequest.getRemoteAddr();
// 访问者的真实IP地址(若经过反向代理,则该地址为真实的访问者IP地址,否则为空)
String xRealIp = httpServletRequest.getHeader("X-Real-IP");
// 若存在X-Real-IP,则用X-Real-IP作为访问者的IP地址
if (xRealIp != null && !"".equals(xRealIp)) {
 customerIp = xRealIp;
}