3

我似乎无法获得自定义片段长度:

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 个字符。根据这个文档,snippet 函数可以得到 3 个参数:搜索词、要进行snippet 的字段和一个可选的snippet 长度。

似乎它完全忽略了我传递的第三个参数......我做错了什么吗?

4

2 回答 2

3

似乎代码片段在开发服务器上不起作用。请参阅文档:https ://developers.google.com/appengine/docs/python/search/devserver

使用 Python 开发服务器

Python 开发服务器在您的本地计算机上运行,​​并模拟大多数搜索 API 的功能。但是,服务器上当前不提供一些功能。目前,在开发服务器上运行时,您不应尝试使用以下功能:

表达式中的函数

这些功能不可用:

  • 片段()
  • 地理点()
  • 距离()
  • 战俘()

正如advoretsky所说,returned_expressions需要是一个可迭代的。从文档:

返回表达式

FieldExpression 的可迭代对象,用于评估并在搜索结果中返回。

此外,请确保您导入了正确的QueryQueryOptions,两者也都在google.appengine.ext.ndb. 我更喜欢导入它们,所以它们有一个前缀,这样可读性会更好;-)

from google.appengine.ext import ndb
from google.appengine.api import search

# Notice the nice distinction
ndb.Query
search.Query
于 2013-11-29T14:49:56.263 回答
1

我还没有为自己尝试过,但根据参考returned_expressions 应该是 iterable。另请参阅 查询和排序选项的示例并更改为

returned_expressions=[FieldExpression('content_snippet', snippet)]
于 2013-11-24T14:03:08.620 回答