高效的Lucene指数,用于根据引文和年份提升查询

时间:2012-10-27 07:49:02

标签: lucene

我正在建立一个研究论文索引,每个论文都有标题,作者,摘要文本,出版年份,参考书目中的文章ID等字段。我需要有效地组合一些基于的查询关于文章之间的引文链接。

编辑:在一个典型的例子中,我可能正在寻找以下文章:

+(title:preterm abstract:preterm)

但是我希望能够推出多次引用的文章。因此,对于每篇文章A,我可以使用+bibliography:A之类的查询收集引用文章的所有文章,然后在我添加的新citationCount字段中索引此类文章的数量到A。然后我可以使用FunctionQuery,IntFieldSource和BoostedQuery为查询添加引用计数提升,以获得类似:

+(title:preterm abstract:preterm)
+boost(int(citationCount), const(0.1))

我还想根据引用它的文章中使用的术语来推广一篇文章。因此,如上所述,我可以使用A这样的查询收集引用bibliography:A的所有文章,然后将其所有标题和抽象字词编入索引为新citingTitles和{{1}已添加到citingAbstracts的字段。然后,我可以通过创建如下的查询来引发基于引用条件的查询:

A

这一切都正常,直到我需要一年的限制。例如,我可能只需要根据1990年之前发生的引用来提升查询。基本上我需要这样的东西:

+(title:preterm abstract:preterm)
+boost((citingTitles:preterm citingAbstracts:preterm), const(0.5))

但是按照这种方法逐字地创建每个+(title:preterm abstract:preterm) +boost(int(citationCountBefore1990), const(0.1)) +boost((citingTitlesBefore1990:preterm citingAbstractsBefore1990:preterm), const(0.5)) 字段(例如使用像XXXBeforeXXX之类的查询)将需要大量重复 - 例如,引用文章的摘要中的所有术语都将重复在+bibliography:A +year:[* TO XXX]citingAbstractsBeforeXXXcitingAbstractsBeforeXXX+1

如何避免这种重复,但仍能快速查询?

编辑:也许有一些方法可以使用query time join执行此操作?这个问题感觉有点像连接,但我不会立即看到它是如何工作的。

1 个答案:

答案 0 :(得分:0)

我不确定将“比较用户术语查询< ..>与2003年之前引用文章A的所有文章的摘要”进行比较“是什么意思,但对于日期(第一个例子),我是执行以下操作(伪代码):

示例文件:

id:article_1
creation_date:1990
bibliography:<none>

id:article_2
creation_date:1991
bibliography:article_1

id:article_3
creation_date:2000
bibliography:article_1,article_2

然后查询1996年之前引用第1条的文章,你可以这样查询:

bibliography:article_1 AND creation_date:[* TO 1996]

这将返回id:article_2并且不应该是昂贵的。