【问题标题】:How to format search autocompletion part lists?如何格式化搜索自动完成部件列表?
【发布时间】:2010-01-19 07:27:49
【问题描述】:

我目前正在开发一个 AppEngine 项目,我想实现搜索词的自动完成功能。可以搜索的 item 相当明确且简短,因此我正在考虑通过为每个 item 提供不完整类型的列表来实现它。所以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”。

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

【问题讨论】:

    标签: python google-app-engine search autocomplete autosuggest


    【解决方案1】:

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

    我已经在thread 中发布了代码。搜索框of this site 正在使用它。如果您愿意,请随意使用它。

    【讨论】:

    • 用空格分割单词有用吗?当用户在搜索框中输入 both 字词时,如何匹配字符串?您是否需要为每个单词进行单独的数据库查询?喜欢word1 in startings + word2 in startings + word3 etc...
    • 不,实际上你可以为每个单词级联一个过滤器:query.filter('start' = 'word1').filter('start = ', 'word2') ....
    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 2014-02-25
    • 2011-05-26
    • 1970-01-01
    • 2017-08-27
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多