为了进行我的实验,我需要为我的文档集合中的每个字段定义特定的相似度度量。
例如,我需要使用tf.idf来测量描述字段的相似性,并使用Harvesine距离来测量地理位置字段的相似性等等...
我现在正在研究Similarity类。我想知道是否有任何好的教程或示例可以帮助我更快地进行...
谢谢
编辑: 如果我理解正确,您有每个字段的相似度公式,并且希望对所有其他文档运行它以使用每个文档。 您可以在索引时间使用几个选项:
在这两种方法中,您可以利用payloads存储特定于术语的信息(对于纬度和经度数据可能很有用)。
使用其中一种方法实现一个相似性类之后,使用Similarity.setDefault(mySimilarity)将其设置为索引和搜索的相似性实例。
然后才能索引您的文本语料库,稍后可以搜索-您可能还需要扩展Searcher类以获取原始相似度。
话虽如此,我认为这种方法对于您的用例是错误的 - Lucene被优化为获取几个相似的文档,而不是每个文档的得分,因此我预测运行时间将是禁止的 - 希望我错了,但无论如何,我建议您阅读大规模数据挖掘以获得更好的方法 - 最小哈希和shingling。
祝你好运。
Patrick,我首先引用Grant Ingersoll关于修改Similarity类的话:“这里有龙”。自定义Lucene的Similarity类很难。我已经做过了。这并不好玩。只有在绝对必要的情况下才这样做。
我建议您先阅读Grant的空间搜索论文,他的可发现性论文和他的“调试相关性”论文。这些论文展示了其他获取所需结果的方法。