我似乎无法获得自定义代码段:
snippet = 'snippet("%s", content, 50)' % search_query
index = search.Index(name='index', namespace='namespace')
start_time = time.time()
results = index.search(
query=Query(
query_string=search_query,
options=QueryOptions(
limit=10,
cursor=Cursor(),
sort_options=SortOptions(
match_scorer=search.RescoringMatchScorer()),
returned_expressions=FieldExpression('content_snippet', snippet))))
我想要一个长度为50个字符的代码段,而不是默认的160个字符。根据此文档,代码段功能可以获得3个参数:搜索词,要摘录的字段和可选的片段长度。
似乎它完全无视我通过的第三个参数......我做错了什么?
答案 0 :(得分:3)
似乎片段不能在devserver上运行。请参阅文档:https://developers.google.com/appengine/docs/python/search/devserver
使用Python Development Server
Python开发服务器在您的本地计算机上运行,并模拟大多数Search API的功能。但是,服务器上当前不提供一些功能。目前,在开发服务器上运行时,不应尝试使用以下功能:
表达式中的函数
这些功能不可用:
- 片段()
- 的GeoPoint()
- 距离()
- POW()
正如advoretsky所说,returned_expressions
需要是可迭代的。来自文档:
<强> returned_expressions 强>
可迭代的FieldExpression,用于评估并返回搜索结果。
此外,请务必导入右Query
和QueryOptions
,这两者也可在google.appengine.ext.ndb
中找到。我更喜欢导入它们,因此它们有一个前缀,然后更好的可读性; - )
from google.appengine.ext import ndb
from google.appengine.api import search
# Notice the nice distinction
ndb.Query
search.Query
答案 1 :(得分:1)
我还没有亲自尝试,但根据参考 returned_expressions should be iterable。另请参阅Query and Sorting Options上的示例并更改为
returned_expressions=[FieldExpression('content_snippet', snippet)]