Lucene:相似性类......如何定义几个相似性度量?

时间:2011-02-25 21:19:27

标签: java lucene

对于我的实验,我需要为我的收藏文件的每个字段定义特定的相似性指标。

例如,我需要测量描述字段与tf.idf的相似性,以及使用Harvesine距离的地理位置字段...等等...

我现在正在研究Similarity类。我想知道是否有任何好的教程或示例,以便更快地进行...

感谢

1 个答案:

答案 0 :(得分:1)

编辑: 在IIUC中,每个字段都有一个相似性公式,并且您希望每个文档使用它,与所有其他文档一起运行。 您可以在索引时使用多个选项:

  1. 扩展DefaultSimilarity类。
  2. 如果您只需要修改部分方法,则扩展SimilarityDelegator类。
  3. 在这两种方法中,您可以使用payloads来存储特定于术语的信息(可能对lat-long数据有用)。

    使用其中一种方法实现Similarity类后,使用Similarity.setDefault(mySimilarity)将其设置为用于索引和搜索的Similarity实例。

    只有索引你的文本语料库,你可以在以后搜索 - 你可能还需要扩展Searcher类来获得原始的相似性。

    话虽如此,我相信这种方法对你的用例是错误的 - Lucene已经过优化,可以得到一些类似的文档,而不是每个文档的得分,所以我预测运行时会让人望而却步 - 希望我错了,但是尽管如此,我建议你阅读Mining of Massive Datasets以获得更好的方法 - 最小的哈希和乱七八糟。

    祝你好运。

    Patrick,我将首先引用Grant Ingersoll关于修改Similarity类:"Here be Dragons"。定制Lucene的Similarity类很难。我做到了这一点。 这不好玩。只有你必须这样做才能做到这一点。

    <击>

    我建议您先阅读Grant's spatial search paperhis findability paperhis 'debugging relevance' paper。这些显示了根据需要获得点击的其他方式。