【问题标题】:Best approach for doing full-text search with list-of-integers documents使用整数列表文档进行全文搜索的最佳方法
【发布时间】:2011-09-12 21:43:05
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 闻起来像数据库工作。

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


【解决方案1】:

在我看来你有一个vectorspace model,所以 Lucene 或类似的产品可能对你很有效。一般来说,如果满足以下条件,倒排索引模型会很好:

  1. 你事先不知道班数
  2. 相对于图片的数量有很多类

如果您的问题不符合这些标准,那么按照 Thomas 的建议,普通的关系数据库可能会更好地工作。如果它符合#1 但不符合#2,您可以调查“面向列”的非关系数据库之一。我对这些不够熟悉,无法告诉您它们的工作情况,但我的直觉是您需要自己复制 IR 工具包中的许多功能。

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

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

【讨论】:

  • 我将根据您的观点详细研究该领域。我最近听说了 CLucene,一个用于 Lucene 的 C++ 端口,所以也许我也会尝试一下。感谢您的回答!
【解决方案2】:

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

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

另一方面,LIRE 已被修改为索引特征向量。但是,它似乎不适用于词袋模型。另外,我想我在作者的网站上读到它目前使用蛮力匹配而不是倒排文件索引来检索图像,但我希望它比 Lucene 本身更容易扩展。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2016-08-02
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    相关资源
    最近更新 更多