使用xapian后端的django-haystack浮点索引转换异常求助
xapian_haystack (3.0.1) 范围过滤转换异常
异常信息
Traceback (most recent call last): File "/home/pooh/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/home/pooh/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/pooh/venv/lib/python3.10/site-packages/haystack/views.py", line 161, in search_view return view_class(*args, **kwargs)(request) File "/home/pooh/venv/lib/python3.10/site-packages/oscar/apps/search/views.py", line 25, in __call__ response = super().__call__(request) File "/home/pooh/venv/lib/python3.10/site-packages/haystack/views.py", line 52, in __call__ self.results = self.get_results() File "/home/pooh/venv/lib/python3.10/site-packages/oscar/apps/search/views.py", line 68, in get_results return super().get_results().models(Product) File "/home/pooh/venv/lib/python3.10/site-packages/haystack/views.py", line 90, in get_results return self.form.search() File "/home/pooh/metagrocery/oscar_forks/search/forms.py", line 61, in search vals_range=get_vals(sqs_range) File "/home/pooh/metagrocery/oscar_forks/search/forms.py", line 45, in get_vals for _1 in sorted(filter(None, (_.sugar for _ in s))) File "/home/pooh/metagrocery/oscar_forks/search/forms.py", line 45, in <genexpr> for _1 in sorted(filter(None, (_.sugar for _ in s))) File "/home/pooh/venv/lib/python3.10/site-packages/haystack/query.py", line 150, in _manual_iter if not self._fill_cache( File "/home/pooh/venv/lib/python3.10/site-packages/haystack/query.py", line 231, in _fill_cache results = self.query.get_results(**kwargs) File "/home/pooh/venv/lib/python3.10/site-packages/haystack/backends/__init__.py", line 677, in get_results self.run(**kwargs) File "/home/pooh/venv/lib/python3.10/site-packages/haystack/backends/__init__.py", line 587, in run final_query = self.build_query() File "/home/pooh/venv/lib/python3.10/site-packages/xapian_backend.py", line 1261, in build_query query = self._query_from_search_node(self.query_filter) File "/home/pooh/venv/lib/python3.10/site-packages/xapian_backend.py", line 1302, in _query_from_search_node constructed_query_list = self._query_from_term(term, field_name, filter_type, is_not) File "/home/pooh/venv/lib/python3.10/site-packages/xapian_backend.py", line 1388, in _query_from_term query_list.append(self._filter_range(term, field_name, field_type, is_not)) File "/home/pooh/venv/lib/python3.10/site-packages/xapian_backend.py", line 1581, in _filter_range pos, begin, end = vrp('%s:%s' % (field_name, _term_to_xapian_value(term[0], field_type)), File "/home/pooh/venv/lib/python3.10/site-packages/xapian_backend.py", line 148, in __call__ begin = _term_to_xapian_value(float(begin), field_type) ValueError: could not convert string to float: "b'\xb1'"
问题分析
在_filter_range及其相关方法中,代码先将值转换为float,用于组装成field_name:term格式传入范围过滤器,但过滤器内部再次执行转换时触发了ValueError,无法将字符串"b'\xb1'"转为浮点数。目前尚未完全理清此处逻辑,但重复转换是引发异常的直接诱因。
内容的提问来源于stack exchange,提问作者aikipooh
相关产品推荐
相关产品推荐

