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

时间:2011-09-12 21:43:05

标签: c++ opencv lucene indexing full-text-search

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:0)

听起来我觉得你有vectorspace model,所以Lucene或类似的产品可能适合你。一般来说,如果符合以下条件,倒排索引模型就会很好:

  1. 您事先不知道课程数量
  2. 有很多关于图像数量的类
  3. 如果你的问题不符合这些标准,正常的关系数据库可能会更好,正如托马斯建议的那样。如果它符合#1但不符合#2,则可以调查其中一个“面向列”的非关系数据库。我对这些不太熟悉,告诉你它们有多好用,但我的直觉是你需要自己在IR工具包中复制很多功能。

    Lucene是用Java编写的,我不知道任何C ++端口。 Solr将Lucene公开为Web服务,因此从您选择的任何语言中都可以轻松访问它。

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

答案 1 :(得分:0)

您可以在此处查看Lucene的图像检索(LIRE):http://www.semanticmetadata.net/2006/05/19/lire-lucene-image-retrieval-04-released/

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

另一方面,

LIRE已被修改为索引特征向量。然而,它似乎没有开箱即用的文字袋模型。此外,我想我已经在作者的网站上看到它目前使用强力匹配而不是反转文件索引来检索图像,但我希望它比Lucene本身更容易扩展用于您的目的。

希望这有帮助。