Lucene Term 和 Fields 的区别

Yoa*_*eva 5 lucene lucene.net search-engine

我读了很多关于 Lucene 索引和搜索的内容,但仍然不明白 Term 是什么?term 和 fields 之间有什么区别?

and*_*mes 4

一个非常粗略的类比是,字段就像数据库表中的列,术语就像每个数据库列中的内容。

更具体地说,是 Lucene:

条款

术语是索引标记。看这里

Lucene 分析器正在处理将文本分解为索引标记(也称为术语)的管道

因此,例如,如果文档中有以下句子......

"This is a list of terms"
Run Code Online (Sandbox Code Playgroud)

...然后您将其传递给空白标记生成器,这将生成以下术语:

This
is
a
list
of
terms
Run Code Online (Sandbox Code Playgroud)

因此,术语也是您在执行搜索时放入查询中的内容。有关如何在经典查询解析器中使用它们的定义,请参阅此处。

领域

字段是文档的一部分。

一个简单的例子是文档的标题与文档的正文(剩余的文本/内容)。它们可以定义为 Lucene 索引中两个独立的 Lucene 字段。

(显然,您需要能够解析源文档,以便可以将标题与正文分开 - 否则在构建 Lucene 索引时无法正确填充每个单独的字段。)

然后,您可以将所有标题术语放入标题字段中;并将 body 的术语放入body字段中。

现在您可以将标题数据与正文数据分开搜索。

您可以在此处此处阅读有关字段的信息。有各种不同类型的字段,具体取决于它们将保存的数据(术语)的类型。