使用整数列表文档进行全文搜索的最佳方法
Best approach for doing full-text search with list-of-integers documents
我正在研究一个基于相似性的c++/Qt图像检索系统,其工作原理如下(我将尽量避免不相关或偏离主题的细节):
我收集了一组图像,并使用OpenCV函数从它们构建索引。之后,对于每个图像,我得到一个整数值列表,表示每个图像所属的重要"类"。两幅图像的相同整数越多,人们就认为它们越相似。因此,当我想查询系统时,我只需要计算表示查询图像的整数列表,执行全文搜索(或类似搜索)并检索X个最相似的图像。
我的问题是,执行这种搜索的最佳方法是什么?我听说过Lucene, Lemur和其他索引方法,但我不知道这种全文搜索是否是最好的方法,因为域被简化了(只有整数而不是单词)。我想知道在效率、准确性或c++友好性方面有哪些替代方案。
谢谢!
听起来你有一个向量空间模型,所以Lucene或类似的产品可能很适合你。一般来说,如果:
,反向索引模型将会很好:- 你事先不知道课程的数量
- 有很多类相对于图像的数量
如果你的问题不符合这些标准,一个普通的关系数据库可能会更好地工作,正如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本身更容易扩展您的目的。
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- C++ STL 容器中优先级搜索的优雅方法
- 是否有一种有效的方法来搜索队列中的关键字并覆盖其值
- 这是在传递 int num 时创建搜索函数的正确方法吗?使用链表库
- 删除节点方法实际上不会删除二叉搜索树中的节点.C++
- 从另一个向量中搜索和找到元素的有效方法
- 比较数据库搜索方法
- 双向链表插入方法实现 - 正在搜索哪个节点
- 搜索字符串是否至少包含一次从 0 到 9 的所有数字的最有效方法
- 在排序静态数组中搜索的最快方法
- 从基于矢量的二叉搜索树中删除节点的最佳方法
- 这是哨兵线性搜索的错误方法吗?
- C - 搜索地图中具有相同值的所有键的最快方法是什么
- 一半填充二进制搜索树进行测试的最佳方法
- 在C++中搜索地址表的最快方法
- 超快速搜索整数子字符串的方法
- 为什么这种搜索方法不可扩展
- 在 C++ 中,在矩阵中搜索最小值和最大值以及不同行或列的最快方法是什么
- 搜索方法可以获得更小的rdf(n3)数据集
- 如何执行索引搜索方法