我想用Lucene对一些文档进行文本搜索。提供的文件已在表格中标记化:
|documentID|token|position|
'documentID'是令牌所在的文档的id
'position'描述了在文档中写入令牌的位置
我的第一次尝试是创建一个索引来搜索令牌并返回documentID。所以我为每个documentID创建了一个Lucene文档。对于每个Lucene文档,我为本文档中的每个标记添加了一个IntField“documentID”和几个StringFields“标记”。因此,没问题。
现在我开始了第二次尝试,包括位置信息。首先想到:“没问题,只需将StringFields'位置'添加到Lucene文档中!”但是......那么我和位置之间没有任何关系。这是我最终想要的一个例子:
INPUT:
tomato
OUTPUT:
docID1|position1
docID1|position2
docID2|position1
...
我怎样才能做到这一点?在我看来,最简单的解决方案是停止转换文档> Lucene文档并开始将单个标记映射到Lucene文档。
所以我为每个唯一的token / documentID组合创建了一个Lucene文档(当然只适用于包含令牌的documentID)。然后我将令牌和documentID作为字段添加到文档中。此外,每次击中包含表中“位置”的IntField
示例:
StringField 'token1'
IntField 'documentID1'
IntField 'position1'
IntField 'position2'
IntFIeld 'position3'
StringField 'token1'
IntField 'documentID2'
IntField 'position1'
IntField 'position2'
还有其他方法可以存储链接字段吗?
答案 0 :(得分:0)
为什么要使用Lucene呢?您是否还有其他需要Lucene功能的要求?如果没有,您只需要一个“地图”数据结构。关键是令牌。该值包含文档ID列表以及位置列表。