Azure搜索筛选器查询将执行类型强制吗?

时间:2018-12-26 17:27:24

标签: odata azure-search

尤其对于布尔值,Azure搜索筛选器查询是否将执行类型强制?用户在我的应用程序中可能选择用于搜索的每个可过滤值都是一个字符串值。在构建OData查询时,当其他十几个值只是字符串时,我不需要执行逻辑来检查这个布尔值以相应地调整查询字符串。我只希望能够将每个值都用单引号引起来,这种逻辑更简单,这与除布尔值等以外的所有值都用单引号引起来相反。

在建立索引时,我没有办法进行测试,但是我正在为此编写客户端代码,以准备何时存在。

例如,假设我有一个名为“ isDeleted”的布尔标志,它指示数据库中的记录是否已被“ sudo”删除,是否已添加到搜索索引中。如果我将以下过滤器添加到Azure搜索的有效负载帖子中,我是否将获得记录,该值是真实的:

class SavedUnitView(APIView): """ Query all the unites saved """ @staticmethod def get_unit(request, pk): try: return Unit.objects.get(pk=pk) except Unit.DoesNotExist: return Response(status=status.HTTP_400_BAD_REQUEST) @staticmethod def post(request, pk): if request.user.is_authenticated: unit = get_object_or_404(Unit, id=pk) serializers = SavedSerializer(data=unit) if serializers.is_valid(raise_exception=True): created = SavedUnit.objects.get_or_create( user=request.user, unit=unit) return Response(status=status.HTTP_201_CREATED) return Response(status=status.HTTP_401_UNAUTHORIZED) def get(self, request): units = SavedUnit.objects.filter(user=self.request.user.id) try: serializers = SavedSerializer(units, many=True) return Response(serializers.data, status=status.HTTP_200_OK) except Unit.DoesNotExist: return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)

注意,我将“ true”值用单引号引起来,表明它可能是字符串。 Azure搜索引擎将对此执行类型强制转换并拉回记录,还是仅有效过滤器

... "filter": "isDeleted eq 'true'" ...

谢谢!

1 个答案:

答案 0 :(得分:0)

Azure Search仅支持OData标准中定义的类型转换。具体来说,支持扩展数字转换,这就是为什么您可以将双精度数与整数进行比较的原因。 Azure搜索不允许在过滤器表达式中的字符串之间进行任何自动转换。