【发布时间】:2017-12-13 04:39:43
【问题描述】:
也许这个问题的标题有点奇怪,因为我根本不知道我在找什么。
我有一些数据,例如一个字符串和多个与之关联的标签。现在我希望能够使用字符串搜索我的数据。
编辑:问题不在于字符串比较或子字符串 搜索! 问题是从结果到数据的连接 对象。
这里是电影示例:
"Title1" tags: "genre1" "genre2" "actor1" "actor2"
"Title2" tags: "genre2" "actor2" "actor3"
"Title3" tags: "genre2" "genre3" "actor1" "actor3"
Search for "genre2" -> "Title1", "Title2", "Title3"
Search for "Title1" -> "Title1"
Serach for "actor1" -> "Title1", "Title3"
其他例子:
- YouTube:搜索视频...
- 亚马逊:搜索“tv”,但“tv”不必出现在标题中。
我唯一想到的是一个指向所有可能性列表的多图。然后我必须将搜索字符串与所有键和 tada 进行比较。但我不敢相信这是一个好的解决方案,因为我会有大量的列表......
谁能告诉我我在寻找什么以及如何实现它?我将 c++ 与 Qt 一起使用。我不知道 Qt 是否能以任何方式帮助我。
编辑:我可以像这样将所有关键字添加在一起:
"Title1 genre1 genre2 actor1 actor2"
"Title2 genre2 actor2 actor3"
"Title3 genre2 genre3 actor1 actor3"
用这个键创建一个映射到数据对象。然后我只需要进行字符串搜索并获取搜索字符串是键的子字符串的所有字符串。
但这是一个好的解决方案吗?如果我想在标题中优先匹配匹配怎么办?
【问题讨论】:
-
您考虑过实际的数据库吗?也许是 sqlite?
-
@RetiredNinja 是的,但目前我不确定是否需要。
-
我认为解决这个问题的最佳方法是
suffix tree或suffix array。如果您使用suffix tree,请使用与叶子中的字符串对应的所有标题的索引列表。 -
@abdullah 嗯,我调查了它,但看起来这只会帮助我检测到这样的东西:“ctor”->“actor1”、“actor2”、“actor3”。但最后,我想在这种情况下拥有所有 3 个标题。还是仅将标签的完全匹配视为标签搜索而将所有其他标签视为标题搜索更好?
-
@Darkproduct 你应该测试完全匹配