gpt4 book ai didi

python - Elasticsearch bool 型面返回错误的类型

转载 作者:行者123 更新时间:2023-12-03 01:48:36 25 4
gpt4 key购买 nike

我正在使用ES v5.1.2,并且构面在返回 bool(boolean) 字段的错误类型时遇到问题。这是重现和演示问题的最小设置:

from elasticsearch_dsl import DocType, FacetedSearch, TermsFacet
from elasticsearch_dsl.field import Keyword, Integer, Boolean

class Post(DocType):
comment = Keyword()
likes = Integer()
published = Boolean()
class Meta:
index = 'blog'

class PostSearch(FacetedSearch):
index = 'blog'
doc_types = [Post]
fields = 'comment', 'likes', 'published'
facets = {k: TermsFacet(field=k) for k in fields}

现在在索引中创建一些文档,并执行多面搜索:
>>> Post.init()
>>> Post(comment='potato', likes=42, published=True).save()
True
>>> Post(comment='spud', likes=12, published=False).save()
True
>>> Post(comment='foo', likes=7, published=True).save()
True
>>> search = PostSearch()
>>> response = search.execute()

各个响应数据看起来正确:
>>> response.hits.total
3
>>> vars(response[0])
{'_d_': {u'comment': u'spud', u'likes': 12, u'published': False},
'meta': {u'index': u'blog', u'score': 1.0, u'id': u'AVofDCdDpUlHAgmQ...}}
>>> response[0].published
False

也就是说,我们在搜索结果中反序列化了Python bool(boolean) 值。但是,聚合中的数据不正确:
>>> response.facets.to_dict()
{'comment': [(u'foo', 1, False), (u'potato', 1, False), (u'spud', 1, False)],
'likes': [(7, 1, False), (12, 1, False), (42, 1, False)],
'published': [(1, 2, False), (0, 1, False)]}

构面应为3个元组(值,计数,所选)。但是 bool(boolean) 值返回为1和0,它们没有进行反序列化,因此前端和我的模板无法区分整数类型和 bool(boolean) 类型。总而言之,预期和实际行为如下所示:

实际行为:
>>> response.facets['published']
[(1, 2, False), (0, 1, False)]

预期的行为:
>>> response.facets['published']
[(True, 2, False), (False, 1, False)]

我在这里做错了什么?我们如何才能使 Boolean字段的构面值在构面中正确反序列化,就像在实际搜索结果中一样?

最佳答案

关于python - Elasticsearch bool 型面返回错误的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42121440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com