【发布时间】:2012-03-21 01:15:43
【问题描述】:
我正在构建一个自动完成功能,它必须快速查询超过 10 万个单词/短语,并且遇到了一些问题。我的第一个想法是通过某种 trie/三叉树结构,但这些都是严格的前缀匹配,这对我的应用程序来说还不够好(我想要完整的中缀匹配)。然后我转向了一些更大的解决方案,SqlServer FullText Indexing、Lucene、Solr、Sphinx,但 Lucene 和 SqlServer FullText Indexing 实际上并不是全文,而是带有漂亮特性(soundex、邻近度等)的前缀。我试图想出一种 Levenshtein 编辑距离可以提供帮助的方法,但找不到一种方法既能保证至少相当准确,又能支持具有高编辑距离的单词(即 google 和 ogl。编辑距离为 3,但 3 是在一般情况下提高阈值的方法)。
我的问题是,Google/bing 等强者是如何做到的?他们只是在一段时间后暴力破解吗?我想没有,但我找不到任何支持。
任何帮助将不胜感激!
【问题讨论】:
-
我想 N-gram 方法可能会有所帮助。然后是 sna-projects.com/cleo 可以满足您的要求。
-
“Lucene 不是全文”?你能详细说明一下吗?看来您的定义与大多数人使用的定义不同。另外,您对 Solr/Lucene/Sphinx/etc 都进行了哪些尝试?你知道 Solr 有一个特定的组件来处理自动完成吗?
-
我认为全文是指如果我搜索“talli”,则匹配“metallica”。在 sqlserver 和 lucene 下都不是这样。
-
@hermitt : Lucene/Solr 搜索 terms,它可以是单词或单词的一部分或任何你想要的,具体取决于配置。请参阅 aitchnyu 建议的 ngram。
标签: .net autocomplete solr full-text-search sphinx