介绍

Indri和Terrier都是开源的搜索引擎,当中Indri作为Lemur项目的一个重要部分,具有强大的查询接口,易建索引,可扩展,高效率等长处。能够在SourceForge Lemur Project Page中下载。Terrier也是IR领域很有影响力的开源搜索引擎,Terrier是Glasgow大学用Java语言编写的,具有高效灵活及易于部署等特点,眼下最新的版本号为Terrier 4.0。可在Terrier官网下载。

不管Indri还是Terrier整个过程,须要先建立索引,然后依据自己定义的query phrases(查询短语。当然也能够是句子),在已建立的索引上查询,并返回一个结果。类似例如以下(后面会详细解说每一列的含义):

两个搜索引擎的使用关键在于它们的配置文件,接下来解说怎样配置
文本格式
<DOC>
<DOCNO>2011-12-05-20_1323118648-7cfd066125ff1daf479748f81346895d</DOCNO>
<date>12/05/2011 (MM/DD/YYYY)</date>
<SOURCE>arxiv</SOURCE>
<TEXT> S and Λ production in pp interactions at √s = 0.9 and 7 TeV measured with the....</TEXT>
</DOC>

1、Indri

Indri建索引

<parameters>
<memory>16G<memory>
<index>path/to/index</index> //建完索引后,这些索引结果文件存放的位置,如/home/tempUser/myindex
<stemmer>
<name>krovetz</name> //词干化工具,也即分词,这个是默认的,能够选择其它的
</stemmer><corpus>
<path>path/to/original/file/directory</path> //原始须要建立索引的文件文件夹
<class>trectext</class>  //须要建立什么格式的索引,有xml, txt, trectext, web
</corpus><field>
<name>DOCNO</name>  //文本ID号
</field><field>        //假设须要用到时间信息,需加此field。
<name>date</name>
<numeric>true</numeric>
<parserName>DateFieldAnnotator</parserName>
</field>
</parameters>

Indri查询

配置文件

<span style="font-size:14px;"><parameters>
<index>path1/to/index</index>
<index>path2/to/index</index>
<rule>method:dirichlet,mu:1000</rule>  //内置方法,用狄利克雷,參数值1000
<count>1000</count> //每一个查询值返回1000条记录,能够自己设置<query> //第一个查询
<number>001</number>  //编号自定义
//假设文本的公布日期在两个时间段之间的,则在其文本中查询“Abbotsford Arts Centre”,依据其内置算法。计算query phrases与文本的相关度值
<text>#scoreif(#datebetween(10/05/2011 01/26/2012) #1(Abbotsford Arts Centre))</text>
</query>
<query> //第二个查询
<number>003</number>
<text>#scoreif(#datebetween(10/05/2011 08/08/2012) #1(Andy Billig))</text>
</query><trecFormat>true</trecFormat>
<queryOffset>1</queryOffset>
<runID>query_id</runID>  //自定义queryID
</parameters></span>

Indri查询语言
1、Combining Beliefs
#combine,#weight, #not, #max, #or, #band(boolean and)
#wsum, #wand(weighted and)
#weight( 1 #1(Abbotsford Arts Centre)  0.5 #1(office) 0.5 #1(band))
2、Filter Operators
scoreif(#datebetween(10/05/2011 01/26/2012)  #1(Abbotsford Arts Centre)) 
3、Numeric Field Operator
#less( F N ) matches numeric field extents of type Fif value < N
#greater( F N ), #between(F N_low N_high ) , #equals(F N )
4、Date Field Operator
#dateafter( D ),
#datebefore( D ),
#datebetween( D_low D_high ),
#dateequals( D )
查询结果文件:
当中:
第一列:表示第003query
第二列:不用理会
第三列:DOCNO
第四列:排名
第五列:详细排序值
第六列:query_id

2、Terrier

Terrier是还有一个开源的搜索引擎,能够从官网下载terrier-4.0,下载terrier-4.0.gz后。
解压:tar -xvzf terrier-4.0.gz 
得到例如以下:
(Terrier是用java开发的,能够去上面图片的src文件夹下查看源代码)
以下分别说说这些文件夹都是些什么:
bin: 在建索引,检索的时候要用到,在linux系统下用.sh,在windows下用相应的.bat
doc:一些帮助文档集
etc: 存放建立索引和检索时的配置文件
lib:包括terrier能执行所依赖的jar包,如terrier-4.0-core.jar,junit-4.8.1.jar等
licenses:  包括各种依赖包的licenses
src: 搜索引擎源代码
var: 默认的索引。检索结果的存放位置(你能够通过改动etc文件夹下的terrier.properties配置文件,自定义到别的文件夹)
build.xml:各种依赖关系进行build
在执行terrier之前。首先要确定是否已经安装了jdk。
能够通过:echo $JAVA_HOME,若有值,则表示已经安装。否则须要自己去安装,然后
export JAVA_HOME="Absolute_Path_of_Java_Installation"
建索引:
1)定位到terrier文件夹
cd terrier
2)收集须要建索引的文档
./bin/trec_setup.sh "Absolute_Path_To_Collection_Files"

这里须要指定绝对路径。比方须要建索引的文件集在/home/hadoop/kba/kba2014/trecdata/2011-10文件夹下(该文件夹下都为文件。不是文件夹,Files已经是最后一层文件夹了),

则上面的 
Absolute_Path_To_Collection_Files即为 /home/hadoop/kba/kba2014/trecdata/2011-10
执行后在etc文件夹下生成例如以下图:
collection.spec里面的内容例如以下:
/home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-01.trectext
/home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-03.trectext
/home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-05.trectext
/home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-07.trectext
/home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-08.trectext
/home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-11.trectext
/home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-12.trectext
/home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-13.trectext
/home/hadoop/kba/kba2014/trecdata/2011-10/2011-10-05-14.trectext

terrier.properties配置文件的内容例如以下:
#default controls for query expansion
querying.postprocesses.order=QueryExpansion
querying.postprocesses.controls=qe:QueryExpansion
#default controls for the web-based interface. SimpleDecorate
#is the simplest metadata decorator. For more control, see Decorate.
querying.postfilters.order=SimpleDecorate,SiteFilter,Scope
querying.postfilters.controls=decorate:SimpleDecorate,site:SiteFilter,scope:Scope#default and allowed controls
querying.default.controls=
querying.allowed.controls=scope,qe,qemodel,start,end,site,scope#document tags specification
#for processing the contents of
#the documents, ignoring DOCHDR
TrecDocTags.doctag=DOC
TrecDocTags.idtag=DOCNO
TrecDocTags.skip=DOCHDR
#set to true if the tags can be of various case
TrecDocTags.casesensitive=false#query tags specification
TrecQueryTags.doctag=TOP
TrecQueryTags.idtag=NUM
TrecQueryTags.process=TOP,NUM,TITLE
TrecQueryTags.skip=DESC,NARR#stop-words file
stopwords.filename=stopword-list.txt#the processing stages a term goes through
termpipelines=Stopwords,PorterStemmer

terrier.properties里面的#行表示凝视,建立索引时须要注意标签
TrecDocTags表示要建索引的文件的配置
TrecDocTags.idtag:表示须要处理的标签,TrecDocTags.skip=DOCHDR表示要忽略DOCHDR标签。能够有多个,用逗号隔开就可以。
文件格式例如以下:
<DOC>
<DOCNO>id</DOCNO>
<TEXT>text content</TEXT>
</DOC>

TrecQueryTags表示检索的query文件的配置
TrecQueryTags.process表示要处理哪些标签。
文件格式例如以下:
<TOP>
<NUM>003</NUM>  //这个相当于你自己给这个query定一个id。所以能够随便写
<TITLE>"Abbotsford Arts Centre" office band "Abbotsford Arts Centre May" company "Abbotsford Arts Centre"  </TITLE>  //Query Phrases
</TOP>

3)建索引:
./bin/trec_terrier.sh -i
建索引的时候假设DOCNO里面的id长度大于默认的20个字符,那就会报错,例如以下:
这时须要我们再次配置terrier.properties配置文件,增加一行
indexer.meta.forward.keylens=120  //你能够自己定义长度
再次执行建索引命令就不会报错了
你还能够例如以下配置:
collection.spec=/absolute/path/to/your.spec
terrier.index.path=/absolute/path/to/index/path      //你想把你的建好的index放在哪个文件夹
trec.results.file=/absolute/path/to/resultfile.res   //你想想把你的query结果放在哪个文件
ignore.low.idf.terms=false                           //假设某个词的逆文档频率idf非常低,还是要考虑,而不是丢弃
matching.retrieved_set_size=40000                    //query后结果有多少条,假设test.query文件写了非常多个query,那么这么多个query的返回的结果不大于40000,注意此时不是单个query的结果数

对于全部的properties的含义能够在官网terrier.properties中查看。
4)检索:
./bin/trec_terrier.sh -r -Dtrec.model=PL2 -c 10.99 -Dtrec.topics=/path/to/your.query
-r表示retrieve, 
-Dtrec.model表示用什么model去检索,这里用到了PL2模型。详细可在 terrier weighting model中查看
-c表示參数,后面10.99表示參数值
-Dtrec.topics表示your.query文件的详细路径

假设有多个索引文件。多个不同的query。怎么办?
比方对5个文件集分别建立索引,有5个query分别要在相应的索引文件中面找怎么办,因为是共用terrier.properties配置文件的。
所以你能够通过写一个shell脚本。针对不同的文件集。配置相应的collection.spec, terrier.index.path, trec.results.file.

终于得到的结果和开头indri的结果类似。

3、Indri和Terrier注意点

两者在写query phrases时都须要注意不要有其它的字符出现,
indri:除了a-z,A-Z,0-9。空格,其余字符如#@¥%都是非法字符。会导致错误
terrier:除了a-z,A-Z,0-9。空格,在多个单词构成的词组时可用双引號(如"term1 term2  term3")。在表示权重时可用^(如”term1 term2“^0.5)。还有某些情况下可用+和-,详细看官网 terrier query language

Indri和Terrier搜索引擎的使用相关推荐

  1. 13 款开源的全文搜索引擎

    主要介绍13款现有的开源搜索引擎,你可以将它们用在你的项目中以实现检索功能. 1.  Lucene Lucene的开发语言是Java,也是Java家族中最为出名的一个开源搜索引擎,在Java世界中已经 ...

  2. 13 款开源的全文检索引擎

    http://www.iteye.com/news/27484 1.  Lucene Lucene的开发语言是Java,也是Java家族中最为出名的一个开源搜索引擎,在Java世界中已经是标准的全文检 ...

  3. 深度学习核心技术精讲100篇(十五)-搜索引擎Indri系列之安装及使用

    前言 Indri是Lemur项目衍生的一个基于语言模型的新的搜索引擎,由University of Massachusetts和Carnegie Mellon University合作开发. 安装 下 ...

  4. 深度学习核心技术精讲100篇(十六)-搜索引擎Indri系列之如何建立索引 (Indexing)检索评价 (Evaluation)

    前言 在为文档集建立索引时,需要执行IndriBuildIndex path-to-to-index_parameter_file.这里的index_parameter_file是xml格式的参数文件 ...

  5. 13款开源搜索引擎的介绍

    本文档转载自 http://blog.csdn.net/xum2008/article/details/8740063 对现有的开源的搜索引擎的一个简单介绍: Lucene Lucene的开发语言是J ...

  6. TREC Precision Medicine 使用Terrier进行信息检索

    一.实验目标 学会使用一个信息检索系统完成给定的信息检索任务,包括创建索引.选择检索模型并设置参数.评价检索结果等等. 二.实验描述 使用一个信息检索系统,例如Galago.Elastic Searc ...

  7. 电子设计搜索引擎引入分析和见解

    电子设计搜索引擎引入分析和见解 Electronics Design Search Engine Introduces Analytics and Insights 2020年上半年最受欢迎的组件是什 ...

  8. 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+kibanaV5.4.2+x-packV5.4.2安装

    相关博文: 搜索引擎ElasticSearchV5.4.2系列一之ES介绍 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+klanaV5.4.2+x-p ...

  9. 搜索引擎优化培训教程

    很详细的搜索引擎优化培训教材 View more presentations from mysqlops 转载于:https://www.cnblogs.com/macleanoracle/archi ...

最新文章

  1. 【Android 电量优化】电量优化 ( JobScheduler | JobService | AsyncTask )
  2. 【数据结构与算法】之深入解析“Excel表列序号和表列名称”的求解思路与算法示例
  3. 【MySQL】查看 mysql 数据库最后修改时间、创建时间、表大小
  4. [Xcode 实际操作]六、媒体与动画-(6)使用UIBlurEffect给图片添加模糊效果
  5. POJ 2398 Toy Storage
  6. LeetCode 75 颜色分类
  7. 用 PHP 读取和编写 XML DOM
  8. 设计模式12-命令模式
  9. find函数常见错误_终于找到你,查找函数,find必不可少
  10. 傅立叶变换,时域,频域二
  11. js的一些function
  12. RapidXml读取并修改XML文件
  13. it黑马中学习的mybatis配置
  14. 网络层 详解,网络层功能,网络层协议,网络层设备。
  15. 4个高质量站点推荐值得收藏
  16. 快速拿下CKA认证考试,这些要求和tips你得知道
  17. Java基础 IP地址
  18. XML DOM摘要五(XPath)
  19. Netgear R6220桥接组网设置
  20. 自己的服务解密,获取微信小程序用户的手机号码

热门文章

  1. RecyclerView缓存机制(回收些啥?)
  2. EnterpriseLibrary2.0系列文章及下载
  3. MobPush精准把握用户的使用时间
  4. 缓存的Cache Aside模式
  5. IPv6相比IPv4在那些方面做出了改进?IPv4 to IPv6过渡的三种tunnel技术各自的特性...
  6. ctime、mtime、atime
  7. 【玩转Golang】 通过组合嵌入实现代码复用
  8. GRE OVER IPSEC
  9. java 列表组件_Jsp页面列表组件框架设计
  10. 百度怎么进行模糊搜索_百度搜索竞价推广效果怎么样?