我有大量文档、文本文件,我想搜索相关内容。我见过一个搜索工具,不记得在哪里,它实现了一个很好的方法,正如我在下面的要求中描述的那样。
我的要求如下:
- 我需要一个优化的搜索功能:我为这个搜索功能提供了一个列表(一个或多个)部分完整(或完整)的单词,用空格分隔。
- 然后该函数查找包含与第一个单词开头或等于第一个单词的单词的所有文档,然后使用第二个单词以相同的方式搜索这些找到的文档,依此类推,最后它返回一个列表,其中包含找到的实际单词链接包含它们的文件(名称和位置),以获取完整的单词列表。
- 文件必须包含列表中的所有单词。
- 我想使用此功能进行即时搜索,以便我可以实时显示和更新树状结构中的结果。
我想出的解决方案的一种可能方法如下:我创建了一个包含三个表的数据库(很可能使用 mysql):'Documents'、'Words' 和 'Word_Docs'。
- “文档”将包含所有文档的(idDoc、名称、位置)。
- 'Words' 将具有 (idWord, Word) ,并且是所有文档中唯一单词的列表(特定单词仅出现一次)。
- 'Word_Docs' 将具有 (idWord, idDoc) ,并且是它出现的每个单词和文档的唯一 id 组合列表。
然后在每次击键时使用编辑框的内容调用该函数(空格除外):
- 字符串被标记化
- (这里我的轮子旋转了一下):我确信可以构造一条 SQL 语句来返回所需的数据集:(actual_words,doc_name,doc_location);(我不是 SQL 的热门号码),或者对每个令牌进行一系列调用并解析出非重复的 idDocs?
- 然后返回此数据集(/list/array)
然后显示返回的列表内容:
例如:调用:“seq sta cod”显示:
sequence - start - code - Counting Sequences [file://docs/sample/con_seq.txt]
- stop - code - Counting Sequences [file://docs/sample/con_seq.txt]
sequential - statement - code - SQL intro [file://somewhere/sql_intro.doc]
(等等)
这是一种最佳的做法吗?该函数需要快速,还是应该仅在命中空格时调用?它应该提供单词完成吗?(得到数据库中的单词)至少这可以防止对不存在的单词的函数进行无用的调用。如果单词完成:将如何实施?
(也许 SO 也可以使用这种类型的搜索解决方案来浏览标签?(在主页的右上角))