【问题标题】:Lucene - Related data in different fieldsLucene - 不同领域的相关数据
【发布时间】:2014-02-23 12:46:58
【问题描述】:

我想用 Lucene 对一些文档进行文本搜索。提供的文档已在表格中标记:
|documentID|token|position|
'documentID' 是令牌所在文档的 ID
'position' 描述了令牌写入文档中的哪个位置

我的第一次尝试是创建一个索引来搜索令牌并返回 documentID。所以我为每个 documentID 创建了一个 Lucene 文档。对于每个 Lucene 文档,我为该文档中的每个标记添加了一个 IntField 'documentID' 和几个 StringFields 'token'。因此,没有问题。

现在我开始了第二次尝试,包括位置信息。第一个想法:'没问题,只需将 StringFields 'position' 添加到 Lucene 文档!'但是......那么我的位置和令牌之间没有关系。这是我最后想要的一个例子:
INPUT:
tomato
OUTPUT:
docID1|position1
docID1|position2
docID2|position1
@ 987654328@

我怎样才能做到这一点?在我看来,最简单的解决方案是停止转换 document->Lucene-document 并开始将单个标记映射到 Lucene-documents。
因此,我为每个唯一的令牌/documentID 组合创建了一个 Lucene 文档(当然只是针对包含该令牌的 documentID)。然后我将令牌和 documentID 作为字段添加到文档中。此外,对于每个命中,都会有一个包含表中“位置”的 IntField。
示例:

StringField 'token1'
IntField 'documentID1'
IntField 'position1'
IntField 'position2'
IntFIeld 'position3'

StringField 'token1'
IntField 'documentID2'
IntField 'position1'
IntField 'position2'

还有其他存储链接字段的方法吗?

【问题讨论】:

    标签: java lucene full-text-indexing


    【解决方案1】:

    为什么要为此使用 Lucene?您还有其他需要一些 Lucene 功能的要求吗?如果没有,您只需要一个“地图”数据结构。关键是令牌。该值包含文档 ID 列表以及位置列表。

    【讨论】:

    • 我想实现一个搜索引擎。将来我想对这些数据进行一些信息提取,因此我将添加更多包含名称、地点、事件发生的表......尽管,Lucene 索引是持久的,并且在包含数千个条目时进行了优化。地图只是在运行时就在这里,但它应该是持久且高效的。最后我想按照你的建议做,但是在 Lucene 中。
    猜你喜欢
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多