使用整数列表文档进行全文搜索的最佳方法

Best approach for doing full-text search with list-of-integers documents

本文关键字:搜索 方法 最佳 文搜索 整数 列表 文档      更新时间:2023-10-16

我正在研究一个基于相似性的c++/Qt图像检索系统,其工作原理如下(我将尽量避免不相关或偏离主题的细节):

我收集了一组图像,并使用OpenCV函数从它们构建索引。之后,对于每个图像,我得到一个整数值列表,表示每个图像所属的重要"类"。两幅图像的相同整数越多,人们就认为它们越相似。因此,当我想查询系统时,我只需要计算表示查询图像的整数列表,执行全文搜索(或类似搜索)并检索X个最相似的图像。

我的问题是,执行这种搜索的最佳方法是什么?我听说过Lucene, Lemur和其他索引方法,但我不知道这种全文搜索是否是最好的方法,因为域被简化了(只有整数而不是单词)。我想知道在效率、准确性或c++友好性方面有哪些替代方案。

谢谢!

听起来你有一个向量空间模型,所以Lucene或类似的产品可能很适合你。一般来说,如果:

,反向索引模型将会很好:
  1. 你事先不知道课程的数量
  2. 有很多类相对于图像的数量

如果你的问题不符合这些标准,一个普通的关系数据库可能会更好地工作,正如Thomas建议的那样。如果满足第1条而不满足第2条,则可以研究一种"面向列"的非关系数据库。我对这些工具不太熟悉,无法告诉你它们的工作效果如何,但我的直觉是,你需要自己复制IR工具包中的许多功能。

Lucene是用Java写的,我不知道有任何c++的移植。Solr将Lucene公开为一个web服务,所以无论你选择哪种语言,都可以很容易地访问它。

我不太了解Lemur,但它看起来有一个类似的向量空间模型,它是用c++编写的,所以对你来说可能更容易使用。

你可以在这里看看Lucene的图像检索(live): http://www.semanticmetadata.net/2006/05/19/lire-lucene-image-retrieval-04-released/

如果我错了,你正试图实现一个典型的词袋图像检索我是正确的吗?如果是这样,您可能正在尝试构建一个反向文件索引。你可能已经意识到Lucene本身是不合适的,因为它索引文本而不是数字。使用它的类查询索引也会是一个问题,因为它不是设计为"解析"(即检测关键点,提取描述符,然后矢量量化)图像到查询向量。

另一方面,

live已被修改为索引特征向量。然而,它似乎并不适用于词包模型。此外,我想我已经在作者的网站上读到,它目前使用蛮力匹配而不是反向文件索引来检索图像,但我希望它比Lucene本身更容易扩展您的目的。