【发布时间】:2010-09-13 23:03:34
【问题描述】:
我有大量文档、文本文件,我想搜索相关内容。我见过一个搜索工具,不记得在哪里,它实现了一个很好的方法,正如我在下面的要求中描述的那样。
我的要求如下:
- 我需要一个优化的搜索功能:我为这个搜索功能提供了一个列表(一个或多个)部分完整(或完整)的单词,用空格分隔。
- 该函数然后查找包含以第一个单词开头或等于第一个单词的单词的所有文档,然后使用第二个单词以相同的方式搜索这些找到的文档,依此类推,最后它返回一个包含实际单词的列表找到与包含它们的文档(名称和位置)相关联的单词,以获得完整的单词列表。
- 文档必须包含列表中的所有字词。
- 我想使用此功能进行即时搜索,以便实时以树状结构显示和更新结果。
我想出的解决方案的可能方法如下: 我创建了一个包含三个表的数据库(很可能使用 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也可以使用这种类型的搜索解决方案来浏览标签?(在主页的右上角)
【问题讨论】: