0

我目前正在开发一个 AppEngine 项目,我想实现搜索词的自动完成功能。可以搜索的项目相当明确且简短,因此我正在考虑通过为每个项目提供一个不完整类型的列表来实现它。所以foobar会得到一个像[f, fo, foo, foob, fooba, foobar]. 然后将搜索框中的用户文本与此列表进行比较,并建议肯定匹配。

我在考虑这个列表中有几个可能的优化:

  • 从搜索词中删除空格标点符号。Foo. BarFooBar.
  • 去除大写字母
  • 删除像“the”、“a”、“an”这样的前导粒子。The Guy将是guy,并索引为[g, gu, guy]
  • 仅将长于 2 或 3 的子字符串添加到索引列表中。所以The Guy会被索引为[gu, guy]. 我认为只匹配第一个字母的建议不会那么相关。

用户搜索词也将以这种方式格式化,然后搜索数据库。在建议搜索词时,将根据建议的对象的全名添加粒子、标点和大写字母。因此,搜索“the”不会给出任何建议,但搜索“The Gu..”或“gu”会建议“The Guy”。

这是一个好主意吗?主要是:这种格式化会有所帮助,还是只会造成麻烦?

4

1 回答 1

2

我已经遇到了同样的问题,我采用的解决方案与您的想法非常相似。我将项目拆分为单词,将它们转换为小写,删除重音,并创建一个开头列表。例如,"Báz Bar"将成为['b', 'ba', 'bar', 'baz'].

我已经在这个线程中发布了代码。该网站的搜索框正在使用它。如果您愿意,请随意使用它。

于 2010-01-18T23:27:49.637 回答