Lucene 中的方法越接近越好

The closer the better approach in Lucene

我是 Lucene 的新手,如果我的某些术语有误,请提前原谅我。

Lucene提供了不同类型的字段(关键字,文本,未存储,未索引),但它似乎也支持Numeric字段,Int 字段和 Float 字段。

现在,我想知道“越接近越好”功能exists/or是否容易在 Lucene 中实现:

我想将文档的 creation_date 作为 unix 时间存储到浮点字段 中。 然后我希望能够将查询中给出的 unix 时间与文档的索引 unix 时间进行比较。

而不是范围查询(检查范围是否在特定范围之间)或布尔查询(检查值是否相同)我希望能够return 一种基于 unix 时间之间的时间的相似感。 如果时间跨度小,它应该比时间跨度大时得到更高的分数。最好这不应该线性发生,而是例如呈指数发生。所以正如这个问题的标题所说:越近越好.

我注意到 ElasticSearch,它使用 Lucene 作为核心产品 decay function scores,这是我正在寻找的行为吗?这是否存在于 Lucene 中?

最后,我想知道:能否将此 'type' 评分与用于查询文档 body 的默认 tf-idf 评分进行比较,最终得分是文档之间的时间跨度得分和正文文本相似性得分的组合。

我不认为你像弹性搜索那样开箱即用。您总是可以尝试自己将其添加为模块。这些算法可在互联网上大量获得。

您还可以将 lucene 中的提升和负面提升系统与现有排名系统结合使用,以试验是否能为您提供您想要的结果。我在 apache SOLR 上这样做,它的工作就像一个魅力:)

关于你的最后一点,tf-idf 模块在 solr 中可用,如果在 lucene 中还没有,只需从 solr 中复制它并将其作为模块添加到 lucene 中,并将你自己的模块与 tf-idf 模块结合起来以实现综合结果。