我想使用 Lucene 编写自己的搜索引擎。因为我使用的是空间信息,所以我想尝试一些更适合空间数据的索引结构。据我所知,Lucene 本身没有可用的替代结构,LGTE(地理时间日期的 Lucene 扩展)似乎也不允许您访问其他结构。我只是没有看到其他结构还是我必须实施它们?
1 回答
您的问题标题“您可以使用其他索引结构”的直接而简单的答案是您不能 - 至少如果它具有与 Lucene 不同的 API,那么您不能。简而言之,它基本上是字节到 DocIds + 可选发布(文档的位置偏移量加上可选的“有效负载”(发布的任意字节))的排序映射。
也就是说,我想你可以实现一个所谓的 Lucene 编解码器(Lucene 4.x 中的新功能),它有自己的扩展 API,并搜索假设你的特定编解码器的字段。编解码器被设想为具有 Lucene 的 API 的不同实现(例如平衡内存与磁盘上的内容,何时巧妙地压缩/编码与直接表示数据),但也不会引入不同的 API。但我想你可以。
您的问题标题之外的上下文是您想为空间/时间执行此操作,因为在我看来,您不相信 Lucene 的索引足够合适。我强烈反对。最近在 Lucene 空间方面取得了长足的进步,而且还有很多事情要做。例如,许多非关系数据库只会让您索引点数据,但 Lucene 空间可以处理任何 Spatial4j 形状(一个依赖项)和 JTS(另一个依赖项),这基本上是大多数人想要的所有典型形状。还有可扩展的递归算法,用于通过相交、内部、包含和不相交谓词匹配索引形状。我预计最迟在夏末或年末会有一些重大的性能提升。您可能会发现我在 Solr 用户列表上回复的这篇最近的帖子很有趣: http://lucene.472066.n3.nabble.com/Multi-dimensional-spatial-search-tt4062515.html#a4062646 因此,我建议您帮助我改进 Lucene 空间中对于您正在构建的任何系统都需要它的部分. 也许它已经符合要求。