【问题标题】:Google App Engine (python) : Search API : String SearchGoogle App Engine (python):搜索 API:字符串搜索
【发布时间】:2012-06-09 10:53:30
【问题描述】:

我正在使用 Google App Engine 搜索 API (https://developers.google.com/appengine/docs/python/search/)。我已经索引了所有实体并且搜索工作正常。但只有当我搜索完全匹配时,它才会返回 0 个结果。例如:

from google.appengine.api import search

_INDEX_NAME = 'searchall'


query_string ="United Kingdom"
query = search.Query(query_string=query_string)
index = search.Index(name=_INDEX_NAME)

print index.search(query)

如果我运行以下脚本,我会得到如下结果:

search.SearchResults(results='[search.ScoredDocument(doc_id='c475fd24-34ba-42bd-a3b5-d9a48d880012', fields='[search.TextField(name='name', value='United Kingdom')]', language='en', order_id='45395666'), search.ScoredDocument(doc_id='5fa757d1-05bf-4012-93ff-79dd4b77a878', fields='[search.TextField(name='name', value='United Kingdom')]', language='en', order_id='45395201')]', number_found='2')

但如果我将 query_string 更改为 "United Kin""United" 它返回 0 结果如下:

search.SearchResults(number_found='0')

我想将此 API 用于普通搜索和 AutoSuggest。实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: google-app-engine full-text-search google-search-api


    【解决方案1】:

    App Engine 的全文搜索 API 不支持子字符串匹配。

    但是,我自己需要这种行为来支持用户键入时的搜索建议。这是我的解决方案:

    """ Takes a sentence and returns the set of all possible prefixes for each word.
        For instance "hello world" becomes "h he hel hell hello w wo wor worl world" """
    def build_suggestions(str):
        suggestions = []
        for word in str.split():
            prefix = ""
            for letter in word:
                prefix += letter
                suggestions.append(prefix)
        return ' '.join(suggestions)
    
    # Example use
    document = search.Document(
        fields=[search.TextField(name='name', value=object_name),
                search.TextField(name='suggest', value=build_suggestions(object_name))])
    

    基本思想是为每个可能的子字符串手动生成单独的关键字。这仅适用于短句,但对我的目的非常有用。

    【讨论】:

    • 感谢您的回复 nick,但我有一个大型数据存储,如果我对数据存储中的每个实体都这样做,这不会影响数据存储的大小吗?我有 4 种不同的可搜索模型,每个模型平均有超过 100,000 条记录..
    • 是的,您必须将这些自动生成的关键字与其他数据一起存储。
    猜你喜欢
    • 2014-07-14
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多