谷歌应用程序引擎(蟒蛇)搜索API:字符串搜索(Google App Engine (python)

2019-06-25 09:27发布

我使用谷歌应用程序引擎的搜索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。 什么是实现这一目标的最佳方式是什么?

Answer 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))])

其基本思想是手工生成单独的关键字为每个可能的子字符串。 这仅仅是简短的句子实用,但它为我的目的的伟大工程。



文章来源: Google App Engine (python) : Search API : String Search