【问题标题】:The closer the better approach in LuceneLucene 中的方法越接近越好
【发布时间】:2015-12-19 11:52:23
【问题描述】:

我对 Lucene 还很陌生,所以如果我的某些术语有误,请提前原谅我。

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

现在,我想知道“越接近越好”功能是否存在/或是否易于在 Lucene 中实现:

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

而不是范围查询(检查范围是否在特定范围之间)或布尔查询(检查值是否相同)我希望能够根据unix 时间之间的时间。 如果时间跨度较小,则其最终得分应该高于时间跨度较大的情况。最好这不应该是线性发生的,而是例如以指数方式发生的。所以正如这个问题的标题所说:越近越好

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

最后,我想知道:是否可以将这种“类型”评分与用于查询文档正文的默认 tf-idf 评分进行比较,最终评分是文档之间的时间跨度得分和正文的文本相似度。

【问题讨论】:

    标签: java elasticsearch lucene similarity


    【解决方案1】:

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

    您还可以将 lucene 中的提升和负提升系统与现有的排名系统结合使用来进行试验,如果这样可以得到您想要的结果。我在 apache SOLR 上这样做,它就像一个魅力:)

    最后一点,tf-idf 模块在 solr 中可用,如果还没有在 lucene 中,只需从 solr 复制它并将其添加为 lucene 中的模块,然后将您自己的模块与 tf-idf 模块组合以获得组合结果.

    【讨论】:

    • 你能给我指点这样的模块吗,我一直在努力寻找。但是,我不确定如何将现有的排名系统用于我的事业。默认情况下,它不会将浮点值与其他浮点值进行比较并仅匹配具有相同值的值吗?关于 tf-idf 模块,我猜你指的是 tf-idf 相似类(lucene.apache.org/core/4_0_0/core/org/apache/lucene/search/…)?
    • 是的,在 tf-idf 部分。 lucene 的奇妙之处在于您基本上可以按照自己的方式重新配置它。我实现了一个支持向量机来实现这个结果。但您可以搜索标准衰减算法。这真的取决于你的情况,一个例子-> stackoverflow.com/questions/11653545/…
    • 我相信这在某种程度上是我需要的。遗憾的是,缺乏关于如何在 Lucene 中实现此类功能的可靠信息。我不知道我应该从哪里开始使用这样的算法——比如应该为此创建一个新的相似性类吗?切换到 ElasticSearch/Solr 会解决我的问题吗?最后,您是否在使用 solr 或 Lucene 时合并了 SVM?
    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2019-04-04
    相关资源
    最近更新 更多