我正在建立一个研究论文索引,每个论文都有标题,作者,摘要文本,出版年份,参考书目中的文章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]
,citingAbstractsBeforeXXX
,citingAbstractsBeforeXXX+1
等
如何避免这种重复,但仍能快速查询?
编辑:也许有一些方法可以使用query time join执行此操作?这个问题感觉有点像连接,但我不会立即看到它是如何工作的。
答案 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
并且不应该是昂贵的。